恢复 Mojibaked 文件

恢复 Mojibaked 文件

我最近遇到了几个损坏的文件,其内容在 UTF-8 和 ISO-Latin-1 之间的转换中被彻底烘焙。我该如何修复这些文件?

创建相关损坏文本的过程如下:

  1. 原始文本“ó”保存为 UTF-8 ( 0xC3B3)。
  2. 编码字节 (0xC30xB3) 被解释为 ISO-Latin-1 字符“à”和“³”。
  3. 这些字符被保存为其 UTF-8 表示形式(0xC3830xC2B3)。

该文件现在包含字节C3 83 C2 B3。由此,我需要重建原始字符串“ó”。

如何修复具有此类(或类似)损坏类型的文件?

答案1

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)。

相关内容