2013-02-28 109 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