Unicode

恢復 Mojibaked 文件

  • April 2, 2014

我最近遇到了幾個損壞的文件,它們的內容在 UTF-8 和 ISO-Latin-1 之間的轉換中得到了徹底的烘焙。如何修復這些文件?

創建有問題的損壞文本的過程如下:

  1. 原始文本“ó”保存為 UTF-8 ( 0xC3B3)。
  2. 編碼字節 (0xC30xB3) 被解釋為 ISO-Latin-1 字元、“Ô和“³”。
  3. 這些字元被保存為它們的 UTF-8 表示(0xC3830xC2B3)。

該文件現在包含字節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)。

引用自:https://unix.stackexchange.com/questions/122588