Unicode
恢復 Mojibaked 文件
我最近遇到了幾個損壞的文件,它們的內容在 UTF-8 和 ISO-Latin-1 之間的轉換中得到了徹底的烘焙。如何修復這些文件?
創建有問題的損壞文本的過程如下:
- 原始文本“ó”保存為 UTF-8 (
0xC3B3
)。- 編碼字節 (
0xC3
和0xB3
) 被解釋為 ISO-Latin-1 字元、“Ô和“³”。- 這些字元被保存為它們的 UTF-8 表示(
0xC383
和0xC2B3
)。該文件現在包含字節
C3 83 C2 B3
。由此,我需要重建原始字元串“ó”。如何修復具有這種(或類似)損壞類型的文件?
iconv -f utf8 -t latin1
應該修復它。例如:
echo 'C3 83 C2 B3' | xxd -p -r ; echo # ³ is C2 B3; suspect typo in your question ó # confirms xxd -p -r works echo 'C3 83 C2 B3' | xxd -p -r | iconv -f utf8 -t latin1 ; echo ó # got the ó back
基本上,iconv 撤消了 Latin1->UTF8 轉換,留下了之前的“latin1”(然後您將其視為 UTF8)。