這可能是給定的,但我試圖徹底;因爲.NET的string
類型是UTF-16,XmlDocument.LoadXml(string)
只是簡單地忽略了XML聲明中的encoding
屬性,因爲它包含在.NET字符串中,因爲文檔編碼的任何內容應該已經轉換爲UTF-16?XmlDocument.LoadXml()和XML聲明編碼屬性
回答
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?
我在發佈這個問題之前閱讀了你鏈接的問題,但我沒有問題,使用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
- 1. 使用java編輯xml聲明編碼
- 2. Python和類屬性聲明
- 3. 聲明屬性
- 4. 讀取XML聲明的屬性,在C#
- 5. 編碼屬性和xml文件大小
- 6. 刪除xml編碼屬性
- 7. XML聲明中的編碼python
- 8. 在XML聲明中設置編碼
- 9. RDFS - 聲明屬性
- 10. XMLNS屬性聲明
- 11. 無編碼聲明
- 12. PHP聲明編碼
- 13. Dojo項目中的聲明性編碼或編程編碼?
- 14. 屬性聲明中的__block屬性
- 15. asp.net中的屬性?屬性聲明?
- 16. NUnit - 聲明異常和屬性
- 17. 聲明屬性類,農田和素數
- 18. 屬性和實例變量聲明
- 19. 屬性聲明和相應合成調用的編碼風格是什麼?
- 20. c#類屬性聲明
- 21. xUnit聲明多個屬性
- 22. 已聲明全局屬性
- 23. 附加屬性聲明
- 24. 聲明屬性訪問器
- 25. lxml.etree.XMLSyntaxError:沒有屬性聲明
- 26. 'class'屬性沒有聲明
- 27. 屬性上聲明類型
- 28. class - 變量聲明屬性
- 29. 未聲明'layout_bellow'屬性
- 30. 聲明範圍屬性
它爲什麼要忽略它?如果文件說utf-8,它不能被加載爲utf-16。那不行。或者我誤解了你的問題..? – Default 2013-02-28 09:39:21
在我看來,它應該忽略它,因爲原始數據無論從哪裏來,都應該已經從_whatever_轉換爲UTF-16,因爲它包含在.NET字符串中。 – Stockhausen 2013-02-28 11:21:33