• 熱門專題

vbs指定編碼保存文本文件(含xml、ini)

作者:ahdung  發布日期:2014-08-12 22:27:01
Tag標簽:編碼  文本  文件  
  • 本文還是折騰安裝包期間衍生出來的產物。

    我那安裝包在安裝期間有這個動作:

    - 讓用戶填寫一些信息,待安裝完成后把這些信息寫入軟件安裝目錄中的指定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了一下,奇跡就發生了,當時那個雞動啊~說多了都是淚。

    - 文畢 -

延伸閱讀:

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
彩票联盟网站精河县| 尼勒克县|