2011-12-14 36 views
0

我正在閱讀包含é(e急性)字符的XML文檔。該文檔已被保存爲UTF-8,並且我已確認該字符是帶有二進制文件讀取器的UTF-8(它是c3 + a9)。但是,處理後,字符變爲三字節雜亂(c3 + 83 + c2)。我的猜測是,.NET試圖將字符轉換爲UTF-16(這是我最好的猜測),或者將字符拆分爲一個單字節字符和一個雙字節UTF-8字符。XmlDocument讀取UTF-8'e-acute'字符

我加載像這樣的文件:

XmlDocuments document = new XmlDocuments(); 
document.Load("z:\\source.xml"); 

我應該如何被加載呢?我是否應該通過UTF-8編碼流閱讀此內容?


[編輯]

我忘了說我是裝宣佈自己爲UTF-8的文件。

<?xml version="1.0" encoding="utf-8"?> 
+0

「處理後」=? – 2011-12-14 05:43:23

+0

我仍在試圖找出問題所在。我最大的懷疑是這是一個加載UTF-8爲UTF-16或其他編碼問題的問題,因爲5.1 MB文檔中沒有其他字符被更改。但我不確定。所以,是的,「完成處理後」 - 完成腳本完成運行後。 – Andrew 2011-12-14 05:47:28

回答

3

é在UTF-8編碼爲C3 A9。這兩個字節在Windows-1252代碼頁(又名ANSI代碼頁或.NET中的Encoding.Default)中被解釋爲é。用UTF-8重新編碼這些文件給出C3 83 C2 A9,它與「三字節混雜」的前三個字節相匹配。看起來某些代碼正在執行Windows-1252字節 - > System.String字符 - > UTF-8字節轉換。

我從來沒有見過.NET在XML聲明中明確指定時使用錯誤的編碼(XmlDocument.Load應該「只是工作」),所以我會懷疑代碼中存在一個錯誤。

你怎麼確定它的加載不正確?一旦它在.NET中加載,你會看到字符串,而不是字節,所以我覺得你報告的是不正確的字節序列,而不是錯誤的字符序列,這似乎很奇怪。