【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了一下,奇迹就发生了,当时那个鸡动啊~说多了都是泪。

- 文毕 -

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛客网

考点总结:互联网校招技术岗都考些什么?数据结构算法游戏 + 场景c++面向对象javaJVMSpringandroid数据库计网线程安全linux前端询问面试官

数据结构 红黑树 pk 平衡二叉树 hash表处理冲突的方法 算法 手写 最长无重复字符子串 链表的增、删、查、逆序 数组实现队列,要求可以动态扩展,保证较高的...

3587
来自专栏芋道源码1024

Dubbo源码解析 —— 服务引用原理

前言 经过上一篇dubbo源码解析-简单原理、与spring融合的铺垫,我们已经能简单的实现了dubbo的服务引用.其实上一篇中的代码,很多都是从dubbo源码...

3228
来自专栏用户2442861的专栏

Java Web 中使用ffmpeg实现视频转码、视频截图,javaffmpeg

http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html#!comments

5181
来自专栏双十二技术哥

深入Weex系列(九)Weex SDK可借鉴细节总结

经过前面五篇文章的源码分析及总结,我们对Weex的整体架构及核心源码都有了清晰的认识。本篇文章主要总结我在Weex SDK源码阅读时觉得可以借鉴的细节。

841
来自专栏更流畅、简洁的软件开发方式

Attribute(特性),怎么用才更好?

前几年:   2008年的某一天,我坐火车去北京。硬卧上铺,一晚上就到北京了。爬到上铺之后发现,旁边上铺有一老兄抱着一个笔记本,一开始还以为是看电影呢,仔细一...

2509
来自专栏Java开发者杂谈

For update带来的思考

​ 之所以想写这个专题,是因为最近在做一个抢占任务的实现。假设数据库很多个任务,在抢占发生之前任务的状态都是FREE。现在假设同时有一堆抢占线程开始工作,抢占线...

1283
来自专栏java一日一条

编写可靠 Shell 脚本的 8 个建议

这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训。事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条。毫不夸张地说...

1062
来自专栏极客慕白的成长之路

信息安全实验室招新试题和完全解析

写个网页应该是很简单的,不管是静态网页还是带特效的网页。但是有几个问题,需要说明一下。

1133
来自专栏互联网杂技

重新认识javascript的settimeout和异步

今晚看到QLeelulu的一道JavaScript面试题(setTimeout),稍微想了一下,好不容易连猜带蒙,凑巧说对了答案。但是原因到底是什么呢?自己一时...

3399
来自专栏liuchengxu

Spark GraphX 对图进行可视化

Spark 和 GraphX 对并不提供对数据可视化的支持, 它们所关注的是数据处理. 但是, 一图胜千言, 尤其是在数据分析时. 接下来, 我们构建一个可视化...

2131

扫码关注云+社区

领取腾讯云代金券