这可能是给定的,但我试图彻底;因为.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. 在XML声明中设置编码
- 4. XML声明中的编码python
- 5. RDFS - 声明属性
- 6. XMLNS属性声明
- 7. PHP声明编码
- 8. 无编码声明
- 9. 属性声明中的__block属性
- 10. asp.net中的属性?属性声明?
- 11. 属性和实例变量声明
- 12. NUnit - 声明异常和属性
- 13. 属性声明和相应合成调用的编码风格是什么?
- 14. xUnit声明多个属性
- 15. 声明属性访问器
- 16. c#类属性声明
- 17. 'class'属性没有声明
- 18. ios AppDelegate属性声明
- 19. 未声明'layout_bellow'属性
- 20. 属性上声明类型
- 21. 如何声明python声明性属性模式
- 22. 编码样式和属性
- 23. 导致编译器颜色编码错误的PHP XML声明
- 24. XML声明和转换
- 25. XML编辑属性
- 26. Python源“编码未声明”
- 27. Xerces2-j XML模式属性/元素声明数据类型
- 28. 用户控件声明中类似xml的属性
- 29. 如何在XML中声明一个属性ID
- 30. XML模式验证结果“属性未声明”
它为什么要忽略它?如果文件说utf-8,它不能被加载为utf-16。那不行。或者我误解了你的问题..? – Default 2013-02-28 09:39:21
在我看来,它应该忽略它,因为原始数据无论从哪里来,都应该已经从_whatever_转换为UTF-16,因为它包含在.NET字符串中。 – Stockhausen 2013-02-28 11:21:33