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

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

- 让用户填写一些信息,待安装完成后把这些信息写入软件安装目录中的指定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= '必须是这个[adModeReadWrite]
stream.Charset = "utf-8" '指定编码
stream.Open '打开流
doc.save stream '关键就在这,save不一定是写到文件,还可以写到流对象
stream.SaveToFile "c:\a.xml", '用流对象来存文件
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什么的)的更多相关文章

  1. mysqldump指定编码导出数据

    mysqldump指定编码导出数据 第一步,导出旧库 mysqldump --default-character-set=latin1 -uroot -pXXX --database db >  ...

  2. 一个关于MySQL指定编码实现的小坑

    写在前面 环境:MySQL5.7+,MySQL数据库字符编码实现为utf8,表也为utf8 场景:微信授权获取用户信息(包括昵称)并保存到数据库,有的用户成功了,少数用户却失败了 那么为什么会失败呢? ...

  3. 怎么统计指定文件夹下含有.xml格式的文件数目

    如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...

  4. 做参数可以读取参数 保存参数 用xml文件的方式

    做参数可以读取参数 保存参数 用xml文件的方式 好处:供不同用户保存适合自己使用的参数

  5. mysql创建数据库指定编码uft8

    mysql创建数据库指定编码uft8 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_gener ...

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

    [Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-an ...

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

    执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date ...

  8. Java 输出指定编码的字符串

    Java Sting类有个根据byte,字符编码来输出的构造函数.以下为java文档中的解释.public String(byte[] bytes, String charsetName) throw ...

  9. 简单好用用js就可以保存文本文件到本地

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

随机推荐

  1. Linq动态条件

    很多情况下,我们开发程序,需要动态拼接SQL查询语句; 比如  select top 1 * from User where age= 18  and  name = 'renruiquan' 其中红 ...

  2. 学习Scala第一篇-从hello World开始

    最近开始系统性的学习scala.其实之前使用过scala的,比如我在用Gatling这款性能测试工具的时候就接触到了scala了.Gatling本身就是用Scala写的,而且Gatling的性能测试配 ...

  3. 大叔也说Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出

    回到目录 这个操作在原生android里是很容易实现的,在xamarin里也不难,在activity里有方法OnKeyDown,我们只需要重写一下就可以了,然后通过webView重新加载到要返回的页面 ...

  4. EF架构~CodeFirst数据迁移与防数据库删除

    回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...

  5. excel怎么固定第一行

    这里给大家介绍一下怎么固定表格的第一行,或者说怎么固定表格的表头. 1.我这里有一个成绩表,希望固定住其第一行. 2.选择单元格A2 注意:你只需要选择所要固定行的下一行的任一单元格即可!!! 3.然 ...

  6. Atitit 桌面软件跨平台gui解决方案 javafx webview

    Atitit 桌面软件跨平台gui解决方案 javafx webview 1.1. 双向js交互1 1.2. 新弹出窗口解决1 1.3. 3.文档对象入口dom解析1 1.4. 所以果断JavaFX, ...

  7. JQuery判断数组中是否包含某个元素$.inArray("元素字符串", 数组名称);

    var arry = [ "C#", "html", "css", "JavaScript" ]; var result ...

  8. Linux常用命令01

    Linux对于我们来说,就是跑程序的运行平台,简单的来说,就是服务器,自己也没怎么系统的学习Linux的命令,随着项目的需要, 比如要查找日志,哪里出问题了,哪里报错了,因此自己也慢慢地懂一些常用的L ...

  9. 用户代理字符串userAgent可实现的四个识别

    定义 用户代理字符串:navigator.userAgent HTTP规范明确规定,浏览器应该发送简短的用户代理字符串,指明浏览器的名称和版本号.但现实中却没有这么简单. 发展历史 [1]1993年美 ...

  10. 使用NPOI从Excel中提取图片及图片位置信息

    问题背景: 话说,在ExcelReport的开发过程中,有一个比较棘手的问题:怎么复制图片呢? 当然,解决这个问题的第一步是:能使用NPOI提取到图片及图片的位置信息.到这里,一切想法都很顺利.但NP ...