2013-02-28 138 views
0

這可能是給定的,但我試圖徹底;因爲.NET的string類型是UTF-16,XmlDocument.LoadXml(string)只是簡單地忽略了XML聲明中的encoding屬性,因爲它包含在.NET字符串中,因爲文檔編碼的任何內容應該已經轉換爲UTF-16?XmlDocument.LoadXml()和XML聲明編碼屬性

+0

它爲什麼要忽略它?如果文件說utf-8,它不能被加載爲utf-16。那不行。或者我誤解了你的問題..? – Default 2013-02-28 09:39:21

+0

在我看來,它應該忽略它,因爲原始數據無論從哪裏來,都應該已經從_whatever_轉換爲UTF-16,因爲它包含在.NET字符串中。 – Stockhausen 2013-02-28 11:21:33

回答

0

XML屬性確定編碼類型。

例如

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

這是它的讀取,然後將其轉換爲UTF-16字符串,但如果你希望看到UTF-16字符,你會不會,他們會丟失。

從MSDN文檔字符串here

在一個字符串中的每個的Unicode字符由一個Unicode標 值來定義,也被稱爲Unicode代碼點或Unicode的的序號(數字)值 字符。每個代碼點使用UTF-16 編碼進行編碼,並且編碼的每個元素的數值是由Char對象表示的 。

這意味着當您將帶有XML標頭的XmlDocument.LoadXml()傳遞給您的字符串時,它必須聲明編碼爲UTF-16。否則,實際的底層編碼將與報頭中報告的編碼不匹配,並將導致拋出XmlException。

擴展解釋一下: Why does C# XmlDocument.LoadXml(string) fail when an XML header is included?

+0

我在發佈這個問題之前閱讀了你鏈接的問題,但我沒有問題,使用LoadXml()和'encoding'屬性設置爲UTF-8(也不使用UTF-16)。海事組織將手動將編碼屬性手動更改爲UTF-16將變得煩人和毫無意義,_once_內容以單向或另一種方式存儲到「字符串」,因爲它始終是UTF-16。假設你收到一個UTF-8編碼的XML文檔作爲byte [],並使用Encoding.UTF8.GetString(byte [])';該字符串顯然是UTF-16,但聲明應該說UTF-8,這就是爲什麼我認爲它應該被忽略。 – Stockhausen 2013-02-28 11:29:51