1 回答
TA贡献1900条经验 获得超5个赞
您有一个双重 Mojibake,由于使用不正确的编解码器而损坏了数据。
它实际上是韩语,一个名字:
신영 안
或者,如果使用 HTML 实体,则应将其编码为
신영 안
它翻译成英文为Shin-Young An。
当编码为 UTF-8并按输入代码点分组然后使用十六进制数字显示时,您将得到以下结果:
ec 8b a0
ec 98 81
20
ec 95 88
为了产生你所拥有的输出,有人必须具备:
使用Windows 代码页 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库可以一步“修复”文本,如下所示:
>>> import ftfy
>>> sample = '신영 안'
>>> ftfy.ftfy(sample)
'신영 안'
我使用该库来告诉我使用了哪些编解码器,并使用它的草率 CP1252 解码器来生成上面的解码。
例如,对于您的输入,我使用了:
>>> 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 最初是如何生产的。
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报