这是此 xml 文件中的有效 UTF8 字符吗?

Is this a valid UTF8 character in this xml file?

我从上游数据源收到了一些 XML。

我不确定这些奇怪的字符是否是有效的 UTF8 - 或者 - 上游源代码搞砸了。即输入错误数据 => 输出错误数据。

我猜下面是传递的内容:

Value in XML file  | Unicode Value | UTF-8 Value  | English Description
-------------------------------------------------------------------------------------------
’ | U+2019        | \xe2\x80\x99 | RIGHT SINGLE QUOTATION MARK
• | U+2022        | \xe2\x80\xa3 | BULLET
&              | -not unicode- | --           | Ampsersand, HTML Encoded.

我觉得 UFT-8 值开头的 \ 有点……编码但是.. 做错了吗?

谁能解释一下我在看什么,这样我就知道如何正确解码了。同样令人沮丧的是,我觉得这可能是编码的混合,这会使事情变得糟糕:(

参考:http://utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=string-literal

您收到的 XML 中的 UTF-8 不是问题,因为 &#xXX; 的字符转义编码 个字符 ,因此没有问题编码是什么。 [实际上,可能是这样,因为可能是生成 XML 的任何东西都是由不了解 XML 转义如何工作的人编写的。毕竟,一旦出现问题,就没有必要假设它做任何事情都是正确的,除非得到其他证明。]

看起来确实有些东西一直在处理一些非常好的 UTF-8,就好像它是一种不同的编码,然后决定转义结果。您由此获得的某些字符('U+0080' 和 'U+0099')是 XML 中允许但强烈反对的字符。一些('â' 和 '¢')是完全明智的字符(尽管以非明智的方式产生)使得逃避它的决定几乎与导致他们在那里的任何错误一样奇怪。

无论 mojibake 的来源是什么,您都会得到 mojibake,因此,如果您可以向上游投诉或报告错误,请这样做并在源头修复它,而不是试图修复损坏的东西。

否则,您将不得不尝试取消转义字符,将它们编码成他们认为的任何格式(我猜是 ISO Latin 1,但还有其他可能性),然后对其进行解码就好像它们是 UTF-8。不过,我们无法保证这不会对文档的正确位造成的损害与对错误位的撤销一样多。