Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlDocument.LoadXml()和XML声明编码属性_C#_.net - Fatal编程技术网

C# XmlDocument.LoadXml()和XML声明编码属性

C# XmlDocument.LoadXml()和XML声明编码属性,c#,.net,C#,.net,这可能是既定的,但我正在努力做到彻底;由于.NET的string类型是UTF-16,因此XmlDocument.LoadXml(string)只需忽略XML声明中的encoding属性,由于文档包含在.NET字符串中,因此无论使用什么编码,都应该已转换为UTF-16?XML属性确定编码类型 比如说 <?xml version="1.0" encoding="utf-8" ?> 这就是它被读取的内容,然后它被转换为UTF-16字符串,但如果您希望看到UTF-16字符,则不会看到

这可能是既定的,但我正在努力做到彻底;由于.NET的
string
类型是UTF-16,因此
XmlDocument.LoadXml(string)
只需忽略XML声明中的
encoding
属性,由于文档包含在.NET字符串中,因此无论使用什么编码,都应该已转换为UTF-16?

XML属性确定编码类型

比如说

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

这就是它被读取的内容,然后它被转换为UTF-16字符串,但如果您希望看到UTF-16字符,则不会看到,它们将丢失

从字符串的MSDN文档中:

字符串中的每个Unicode字符由Unicode标量定义 值,也称为Unicode代码点或序数(数字)值 使用Unicode字符。每个代码点都使用UTF-16编码 编码,并且编码的每个元素的数值为 由Char对象表示

这意味着,当您将XmlDocument.LoadXml()传递给带有XML头的字符串时,它必须表示编码为UTF-16。否则,实际的底层编码将与头中报告的编码不匹配,并将导致抛出XmlException

扩展解释如下:

为什么要忽略它?如果文档中显示utf-8,则无法将其加载为utf-16。那不行。还是我误解了你的问题?在我看来,应该忽略它,因为原始数据(无论来自何处)应该已经从where转换为UTF-16,因为它包含在.NET字符串中。我在发布此问题之前阅读了你链接的问题,但我个人使用LoadXml()没有问题使用
编码
属性设置为UTF-8(也不使用UTF-16)。在我看来,一旦内容以一种或另一种方式存储到
字符串中,手动将编码属性始终更改为UTF-16将是烦人且毫无意义的,因为这始终是UTF-16。假设您以
byte[]
的形式收到一个UTF-8编码的XML文档,并使用
Encoding.UTF8.GetString(byte[])
;字符串显然是UTF-16,但是声明应该是UTF-8,这就是为什么我认为应该忽略它。