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

    - 文毕 -

  • 相关阅读:
    dialogue中需要添加编辑器
    表格增加整行和删除整行
    树形菜单配合element-ui模糊搜索和鼠标单击选择内容变色并且滚动
    格式金钱【摘抄与网络,记录】
    element-ui日期选择器
    普通上传
    axios另类封装
    Android permission 访问权限大全
    Android Timer 的 schedule()方法定时循环切换图片
    Android 设置图片倒影效果
  • 原文地址:https://www.cnblogs.com/ahdung/p/3908304.html
Copyright © 2011-2022 走看看