計算機世界盡管現在越來越多地試圖使用unicode這一世界語來說話,但還是存在著gb2312,shift-jis這樣的方言,使用MSXML DOM就會清楚地體會到方言的不便。
我想將下面這個文本文檔直接存為轉換成XML,是否OK,答案是NG(No Good)
strXML="<?xml version=""1.0"" encoding=""GB2312""?><XML>這裡是一些編碼為GB2312的xml文檔</XML>"
Set domXML = New DOMDocument
domXML.loadXML strXML
If domXML.parseError Then Debug.Print domXML.parseError.reason Else Debug.Print domXML.XML
執行這段代碼會返回Switch from current encoding to specifIEd encoding not supported.(不支持從當前編碼轉換到指定的編碼)這樣的錯誤信息。為什麼會這樣呢?Chris Lovett說:[LoadXML 方法總是采用只在 UCS-2 或 UTF-16 中編碼的 Unicode BSTR。如果將非有效的 Unicode BSTR 的內容傳遞給 LoadXML,則加載會失敗。]
因此我們不得不只加載沒有用"方言"的文檔給DOMDocument對象。將<?xml version="1.0" encoding="GB2312"?>去掉,這樣的話strXML將作為unicode字符串交給dom處理。
strXML="<XML>這裡是一些編碼為GB2312的xml文檔</XML>"
看到上面的用法,熱愛自己語言的人們也許會大罵ms的。
如果對這一問題深入研究一下,其實我們完全能做到將帶有方言標志的文檔直接加載到dom上,我編了一個小函數解決之一問題。
Private Function Str2XML(strOri As String) As DOMDocument
Dim XMLDoc As DOMDocument
Set XMLDoc = New DOMDocument
Dim pi() As Byte
pi() = StrConv(strOri, vbFromUnicode)