编码错误 - xml数字替换被误解了
我有xml文件表示从邮件客户端导出的电子邮件。不幸的是,当我尝试读取这些文件时,特殊字符不会显示为显示原始字符。编码错误 - xml数字替换被误解了
我试图让我在.NET中编写的客户端中正确读取。
例子:我碰到下面的数字替代:
á
这被解释为:
á
而原来的/期望值是:
ú
一个可能被更好的例子:
Tað eftir er av árinum ber tó til at logga á
这被解释为:
Tað eftir er av árinum ber tó til at logga á
原始/期望值是:
Tað eftir er av árinum ber tó til at logga á
我可以观察到,这个问题似乎是,该净解释Ã °为两个独立的角色,而实际上代表一个角色。
我相信,我应该能够使用本网站翻译解释值注入预期值(虽然没有确切的文字,我得到):http://www.i18nqa.com/debug/utf8-debug.html
但我无法得到它正确显示。净。
x.Load(
New StreamReader(
File.Open("content.xml", FileMode.Open),
Encoding.GetEncoding(1252), True
)
)
这没有什么区别。如果我尝试Encoding.Unicode则无法读取文件(错误:在根级别无效数据)
找到我的答案在另一篇文章:https://stackoverflow.com/a/5130065/1113421
端了第一次加载在UTF-8的文件,然后我需要的XML节点上,我转换他们对即时:
VB代码
Dim x As New XmlDocument
x.Load(New StreamReader(File.Open("content.xml", FileMode.Open), Encoding.UTF8, True))
Dim nl As XmlNodeList = x.SelectNodes("product/HEADER/object")
For Each nd As XmlNode In nl
Dim result As String = Encoding.UTF8.GetString(Encoding.GetEncoding("ISO-8859-1").GetBytes(nd.InnerText))
Me.txtTemporaryTextbox.Text += result & vbCrLf
Next
这给我的外文字符的正确解释在nd.InnerText。
感谢@JonSkeet的详细说明和链接,指出我朝着正确的方向进一步挖掘。
从字节流(例如文件)加载XML时,不需要指定字符编码。只需让XML引擎找出编码。加载文件时,请勿使用字符阅读器,请使用字节流。 –
为什么你会期望两个数字替换被解析为单个字符?数字替换用于*字符*实体,而不是*字节*。 TL; DR:我相信你的XML不正确,不是.NET的处理。 –
也许我可以手动取两个十进制值195和161并将其转换为十六进制,这会变成c3和ba,这是字符ú的UTF-8十六进制值。但是,这种转换功能是不是内置在.net中? – Andras
我想你已经错过了我的观点。.NET中的XML处理正在做它应该做的事情。如果你想用XML表示U + 00FA,它应该表示为'ú'或'ú'。实体中的数字是一个代码点,如下所示:https://www.w3.org/TR/xml/#sec-references - 它不是*意思是“一个字节,它是编码表示的一部分一个人物”。 –