1 回答

TA貢獻1900條經(jīng)驗 獲得超5個贊
您有一個雙重 Mojibake,由于使用不正確的編解碼器而損壞了數(shù)據(jù)。
它實際上是韓語,一個名字:
?? ?
或者,如果使用 HTML 實體,則應將其編碼為
신영 안
它翻譯成英文為Shin-Young An。
當編碼為 UTF-8并按輸入代碼點分組然后使用十六進制數(shù)字顯示時,您將得到以下結(jié)果:
ec 8b a0
ec 98 81
20
ec 95 88
為了產(chǎn)生你所擁有的輸出,有人必須具備:
使用Windows 代碼頁 1252 解碼上述 UTF-8 數(shù)據(jù),產(chǎn)生
ì?<A0>ì?<81> ì??
(其中<A0>是不間斷空格字符,并且<81>是無效的 CP1252 字節(jié),但這在許多解碼器中經(jīng)常被忽略;我已將它們包含在此表示法中,因為否則它們將無法打?。?/p>
將產(chǎn)生的混亂再次編碼為 UTF-8,得到以下字節(jié)值:
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 字節(jié),這次生成:
??a€1?<A0>?????<81> ??a€¢??
<A0>(與和字符上的注釋相同<81>)
最后將結(jié)果字符編碼為 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 最初是如何生產(chǎn)的。
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報