2010-04-27 45 views
2

我想從vbs腳本讀取xml文件。 XML是在UTF-8編碼,並有適當的頭如何從vbs讀取utf-8 xml並獲取正確的字符代碼

從vbs腳本我使用Microsoft XMLDOM解析器讀取XML:

Dim objXMLDoc 
Set objXMLDoc = CreateObject("Microsoft.XMLDOM") 
objXMLDoc.load("vbs_strings.xml") 

中的XML我想用&#nnn;符號代碼來寫人物。然後我從vbscript中讀取這個字符,並嘗試使用Asc()函數獲取它的代碼。對於某些字符,它可以正常工作,讀取的代碼等於寫入的代碼。但對於某些字符Asc()總是返回代碼63。會是什麼呢?

例子:

如果XML包含<section>&#195;<section>和腳本我有代表這個XML節點,然後代碼Section變量:

Asc(Section.Text) 

將返回值195,它是ok

如果XML包含<section>&#110;<section>然後代碼:

Asc(Section.Text) 

將返回值110,它是ok

但是,如果XML包含<section>&#130;<section><section>&#156;<section><section>&#140;<section>

Asc(Section.Text) 

將返回值63,它肯定不是很好。

你知道爲什麼嗎?

回答

2

代碼點十進制130,156和140不對應於Unicode字符集中的任何字符(123-192未定義)。 Asc正在使用的默認字符映射器會將這些錯誤映射到?這是字符63.這些代碼點映射到哪些字符?

我懷疑你想要的代碼爲:&#8218;&#339;和​​

+0

你可能是對的,如此投票。我更新了我的答案。 – 2010-04-27 17:47:49

+0

謝謝! 我明白了它發生的原因。 我需要這些代碼,因爲我嘗試存儲俄語和日語utf-8字符。 F.ex.俄語字母'М'代表Ð œ p.s.我知道我可以直接在utf-8 xml中存儲這些字母,但我需要它們作爲字節。 – 2010-04-27 19:11:55

+0

@vkjr:很高興你已經整理了它,但是我並不確定我是否理解「字母」和「字節」之間的區別;) – AnthonyWJones 2010-04-28 06:56:35

2

使用ASCW代替:

http://msdn.microsoft.com/en-us/library/zew1e4wc%28VS.80%29.aspx

編輯:這就是說,AnthonyWJones可能是正確的,你的文件或者是使用字符引用或者錯誤地聲明瞭輸入編碼。

+0

這將返回正確的數值,XML中的編碼本身仍然不正確。使用AscW可以工作,因爲不需要嘗試將代碼點從一個代碼頁映射到另一個代碼頁,它僅顯示找到的值。 – AnthonyWJones 2010-04-27 16:07:54

+0

這就是字符引用的要點:引用輸入文檔中無法表示的字符(回車符,錯誤上下文中的單/雙引號,或輸入編碼不能表示字符)。 – 2010-04-27 17:42:26

+0

謝謝,指向AswW()函數幫助我很多! – 2010-04-27 19:12:42