XmlDocument误读了UTF-8'e-acute'字符

时间:2011-12-14 05:27:48

标签: c# xml encoding utf-16

我正在阅读包含é(急性)字符的XML文档。该文档已保存为UTF-8,我已确认该字符为UTF-8,带有二进制文件阅读器(c3 + a9)。但是,在处理之后,该字符变为三字节混乱(c3 + 83 + c2)。

我的猜测是.NET试图将字符转换为UTF-16(这是我最好的猜测),或者将字符分成一个单字节字符和一个双字节UTF-8字符。

我正在加载这样的文档:

XmlDocuments document = new XmlDocuments();
document.Load("z:\\source.xml");

我该如何加载?我应该通过UTF-8编码的流来阅读吗?


[编辑]

我忘了提到我正在加载的文件宣称自己是UTF-8。

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

1 个答案:

答案 0 :(得分:3)

é以UTF-8编码为C3 A9。这两个字节在Windows-1252代码页(又名ANSI代码页或.NET中的Encoding.Default)中解释为é。在UTF-8中对这些进行重新编码会得到C3 83 C2 A9,它匹配“三字节混乱”的前三个字节。似乎某些代码在某处执行Windows-1252字节 - &gt; System.String chars - &gt; UTF-8字节转换。

我从未见过.NET使用错误的编码,当它在XML声明中明确指定时(XmlDocument.Load应该“正常工作”),所以我怀疑你的代码中存在错误。

您是如何确定装载错误的?一旦它在.NET中加载,你就会看到字符串,而不是字节,所以对你来说,你报告的字节序列不正确,而不是错误的字符序列似乎很奇怪。