你有一个 double Mojibake,使用不正确的编解码器破坏了数据。
其实是韩文,一个名字:
신영 안
或者,如果使用 HTML 实体,这个应该已经被编码为
신영 안
它翻译成英文为Shin-Young An。
当encoded to UTF-8 并按输入代码点分组然后使用十六进制数字显示时,您会得到:
ec 8b a0
ec 98 81
20
ec 95 88
要产生你所拥有的输出,必须有人:
-
使用Windows codepage 1252解码上述UTF-8数据,产生
ì‹<A0>ì˜<81> 안
(其中<A0> 是不间断的空格字符,<81> 是无效的 CP1252 字节,但这在许多解码器中经常被忽略;我已将它们包含在此符号中,因为否则它们不会被可打印)
-
再次将生成的混乱编码为 UTF-8,以提供以下字节值:
c3 ac e2 80 b9 c2 a0
c3 ac cb 9c c2 81
20
c3 ac e2 80 a2 cb 86
(分组与上面的正确 UTF-8 匹配)
-
使用相同的 Windows CP1252 编解码器第二次解码这些 UTF-8 字节,这一次产生:
ì‹Â<A0>ì˜Â<81> 안
(<A0> 和 <81> 字符上的注释相同)
-
最终将生成的字符编码为 HTML 实体:
신영 안
如果您安装了 Python,那么ftfy library 可以像这样一步“修复”文本:
>>> import ftfy
>>> sample = '신영 안'
>>> ftfy.ftfy(sample)
'신영 안'
我使用该库告诉我使用了哪些编解码器,并使用它的 sloppy CP1252 decoder 生成上述解码器。
例如对于我使用的您的输入:
>>> ftfy.fixes.fix_encoding_and_explain(ftfy.fixes.unescape_html(sample))
('신영 안', [('encode', 'sloppy-windows-1252', 0), ('decode', 'utf-8', 0), ('encode', 'sloppy-windows-1252', 0), ('decode', 'utf-8', 0)])
查看修复计划,并将其倒过来解释 Mojibake 最初是如何生产的。