【VBS】vbs指定编码保存文本文件(含xml、ini什么的)

本文还是折腾安装包期间衍生出来的产物。

我那安装包在安装期间有这个动作:

- 让用户填写一些信息,待安装完成后把这些信息写入软件安装目录中的指定ini、xml文件中

上文说的是如何用vbs写ini,ini搞完了,这下搞xml。本来借助xml完善的DOM实现,包括vbs在内的大多数语言操作xml都很容易,调用Microsoft.XMLDOM对象即可,比如:

Dim doc
Set doc = CreateObject("Microsoft.XMLDOM")
doc.load("c:\a.xml")
doc.documentElement.appendChild(doc.createElement("ElementOne"))
doc.save("c:\a.xml")

这就完成了对c:\a.xml添加一个元素的任务。

但偏偏遇上了编码的问题。我那xml是要以utf-8编码的,doc.save得到的却是ANSI编码的文件~让人不省心啊不省心,尼玛给save方法加个编码参数会死啊~好吧,文明发博。还是那句,天道酬勤,一番折腾之下总算搞掂:

Dim doc
Set doc = CreateObject("Microsoft.XMLDOM")
doc.preserveWhiteSpace = True ‘不自动处理空白
doc.load("c:\a.xml")
doc.documentElement.appendChild(doc.createElement("ElementOne"))

Dim stream
Set stream=CreateObject("ADODB.Stream")
stream.Mode= 3 ‘必须是这个[adModeReadWrite]
stream.Charset = "utf-8" ‘指定编码
stream.Open ‘打开流
doc.save stream ‘关键就在这,save不一定是写到文件,还可以写到流对象
stream.SaveToFile "c:\a.xml", 2 ‘用流对象来存文件
stream.Close ‘关闭流

简单说就是用DOMDocument对象来操作xml,用Stream对象来保存文件,而流是可以指定编码的,所以问题搞掂。相当于c#的XmlDocument.Save (Stream)方法

解决这问题有点瞎猫撞死耗子,就是DOMDocument的save方法的文档(http://msdn.microsoft.com/en-us/library/ms753769(v=vs.85).aspx)我看了N遍,就没发现有stream的字眼,E文又不好,鬼知道它说的这几样,哪样是可以代表stream的:

当然后来发现还是自己疏忽,伦家在Remarks里面有说的了啦:

只恨当时满屏的E文晃瞎了俺的钛金眼,反正当时在不知道能存到stream的情况下,抱着撞南墙的大无畏精神,使劲save stream了一下,奇迹就发生了,当时那个鸡动啊~说多了都是泪。

- 文毕 -

【VBS】vbs指定编码保存文本文件(含xml、ini什么的),布布扣,bubuko.com

时间: 2024-10-12 00:10:10

【VBS】vbs指定编码保存文本文件(含xml、ini什么的)的相关文章

mysqldump指定编码导出数据后转变编码

第一步,导出旧库mysqldump --default-character-set latin1 -uroot -pXXX --database db >     /tmp/old.sql第二步,转换编码iconv -t utf-8 -f gb2312 -c /tmp/old.sql > /tmp/new.sql第三步,导入新库修改new.sql,增加一条sql语句: "SET NAMES utf8;",保存.mysql -hlocalhost -uroot db <

sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date desc 逻辑上看着挺对 但是报错: 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效.   只要我们在嵌套子查询视图里面加入: top 100 percent 即可 select * from ( select top 100

Java实现Flash请求的二进制流图片保存并返回XML信息包含图片访问地址

前段时间和Flash对接了一个打点功能,java后台提供接口,Flash实现打点功能,将打点好的图片信息传到后台java实现保存图片和打点信息.其中图片是以二进制流的方式传到java后台,图片信息是以XML传到后台保存到数据库.刚开始的实现方式保存图片总是出现损坏,最后放到的图片残缺不全,经过一番调试,最终找到了原因,是在后台写入图片流的时候出现了问题,改了之后一切正常,下面是能够正常执行的代码: public void addDotPicture(HttpServletRequest requ

MySQL 创建数据库并且指定编码

GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;UTF8: CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci MySQL 创建数据库并且指定编码,布布扣,bubuko.com

[WEB API] CLIENT 指定请求及回应格式(XML/JSON)

[Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-and-model-binding 本篇则要演练xml/json 回应 Get 定义 Header:Content-Type 定义 QueryString 请求 Post POST json 数据 POST xml 数据 回应 Get 定义 Header:Content-Type 测试工具:本来想用 p

除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

报错: 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效. 只要我们在嵌套子查询视图里面加入:top 100 percent即可 例如: select * from ( select top 100 percent * from tb order by col desc ) as a order by col desc

MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) (转)

MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以UTF-8为例来说明 需要注意的是,要修改的地方非常多,相应的修改方法也很多.下面是一种最简单最彻底的方法: 一.Windows系统下面 1.中止MySQL服务 2.在MySQL的安装目录下找到my.ini,如果

保存form配置信息INI

(* 功能:IniFormState1 保存和读取 窗体的大小2 保存和读取 窗体在屏幕上的位置//让程序第1次出现在屏幕的中心点获取屏幕的中心点POSITION:poScreenCenter //不行*) //implementation//{$R *.dfm} uses IniFiles;//引用IniFiles /// 写入信息到ini文件   procedure WriteformState(section:string;fileName:string;form:TForm); var 

[转]迄今为止最优的Eclipse运行性能调优 ,含eclipse.ini

最近,Eclipse(Eclipse-JEE3.5)运行十分缓慢(可能插件安装过多),因此,得到了个机会调优一下,以便提高工作效率 下图是未经任何调整eclipse的gc情况(使用jvisualvm命令,安装visual gc插件) 在终端输入:jvisualvm运行后,工具->插件->visual gc,安装. 启动eclipse后,在终端运行: ps -ef | grep eclipse,然后在jvisualvm的应用程序一栏选择eclipse pid的程序双击,即可到visual gc上