【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= '必须是这个[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什么的)的更多相关文章
- mysqldump指定编码导出数据
mysqldump指定编码导出数据 第一步,导出旧库 mysqldump --default-character-set=latin1 -uroot -pXXX --database db > ...
- 一个关于MySQL指定编码实现的小坑
写在前面 环境:MySQL5.7+,MySQL数据库字符编码实现为utf8,表也为utf8 场景:微信授权获取用户信息(包括昵称)并保存到数据库,有的用户成功了,少数用户却失败了 那么为什么会失败呢? ...
- 怎么统计指定文件夹下含有.xml格式的文件数目
如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...
- 做参数可以读取参数 保存参数 用xml文件的方式
做参数可以读取参数 保存参数 用xml文件的方式 好处:供不同用户保存适合自己使用的参数
- mysql创建数据库指定编码uft8
mysql创建数据库指定编码uft8 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_gener ...
- [WEB API] CLIENT 指定请求及回应格式(XML/JSON)
[Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-an ...
- sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date ...
- Java 输出指定编码的字符串
Java Sting类有个根据byte,字符编码来输出的构造函数.以下为java文档中的解释.public String(byte[] bytes, String charsetName) throw ...
- 简单好用用js就可以保存文本文件到本地
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
随机推荐
- 博文写作——摘要&摘要图标
问题描述: 写博文的时候,一个比较好的习惯就是在博文的开头用简短的文字介绍一下本篇博文的大致内容.在博客园系统里面,如果博文没有在指定的地方添加摘要内容,那么系统会自动截取博文的开始部分作为摘要.如下 ...
- write/wall 1
linux:/opt/software/lktest/c # wallhellllllllllllllllllllooooooooooooooooo^[[AasZZZZZZ^Clinux:/opt/s ...
- 爱上MVC~MVC4模型验证可以放在前端
回到目录 MVC4.0推出后,在模型验证上有了一个新的改近,它支持前端验证,即在用户POST之前,如果验证失败,则Action(POST方式的)不会被执行,而直接停留在原视图,这对于用户体验是好的,它 ...
- Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统
今天大部分时间都在写业务代码,然后算是从无到有的配置了下spring与mybatis的集成. SpringMVC+Mybatis Web开发流程 配置数据源 在applicationContext.x ...
- salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesforce中的数据库使用的是Force.com 平台的数据库,数据表一行数据可以理解成一个sObject变量 ...
- Chrome同步最新host文件IP列表
使用Chrome的童靴是不是很多都碰到同步问题呢?网上查来查去的都是给些host文件的修改,可是都是几年前的东西,地址都不对了,想想还是自己找到需要解析的域名的IP地址吧 步骤: 1.DNS设置为8. ...
- 11.按要求编写Java应用程序。 (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另 一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。
package java1; public class Che { //属性 public String nub; public int speed; public double weight ; C ...
- XML学习笔记7——XSD实例
在前面的XSD笔记中,基本上是以数据类型为主线来写的,而在我的实际开发过程中,是先设计好了XML的结构(元素.属性),并写好了一份示例,然后再反过来写XSD文件(在工具生成的基础上修改),也就是说,是 ...
- VS报错:_CRT_SECURE_NO_WARNINGS
常见报错:warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead ...
- Oracle 11g系列:SQL Plus与PL/SQL
SQL Plus是Oracle提供的一种用户接口,是数据库与用户之间进行交互的工具. PL/SQL是Oracle的过程化编程语言. 1.登录SQL Plus 利用Windows的[开始]|[运行]命令 ...