【发布时间】:2017-10-18 09:27:37
【问题描述】:
我有代表从邮件客户端导出的电子邮件的 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 á
我可以观察到问题似乎是,.Net 将 ð 解释为两个单独的字符,而实际上代表一个字符。
我相信我应该能够使用这个网站将解释值转换为预期值(虽然不是我得到的确切字符):http://www.i18nqa.com/debug/utf8-debug.html
但我无法在 .Net 中正确显示它。
x.Load(
New StreamReader(
File.Open("content.xml", FileMode.Open),
Encoding.GetEncoding(1252), True
)
)
这并没有什么不同。如果我尝试 Encoding.Unicode 则它无法读取文件(错误:根级别的数据无效)
【问题讨论】:
-
为什么您希望将两个数字替换解析为单个字符?数字替换用于 character 实体,而不是 bytes。 TL;DR:我认为您的 XML 不正确,而不是 .NET 的处理方式。
-
也许我可以手动取两个十进制值 195 和 161 并转换为十六进制,这将变成 c3 和 ba,这是字符 ú 的 UTF-8 十六进制值。但是这个转换功能难道不是以某种方式内置在 .net 中的吗?
-
我认为你错过了我的意思。 .NET 中的 XML 处理正是它应该做的。如果要在 XML 中表示 U+00FA,则应表示为
ú或ú。实体中的数字是一个代码点,如下所示:w3.org/TR/xml/#sec-references - 它不是意味着“作为字符编码表示的一部分的字节”。 -
@JonSkeet 我不确定 - 只是 xml 文档中的每个非英语字符都由 2 个数字表示形式表示。 195 161 = ú、195 176 = ð 等。XML 可能不正确,但这是我必须使用的...
-
@Andras - 请为您自己着想:与其尝试修复客户端发送给您的不良 XML,不如尝试说服您的客户向您发送良好的 XML。你得到的东西是完全错误的。