我最近遇到了几个损坏的文件,其内容在 UTF-8 和 ISO-Latin-1 之间的转换中被彻底烘焙。我该如何修复这些文件?
创建相关损坏文本的过程如下:
- 原始文本“ó”保存为 UTF-8 (
0xC3B3
)。 - 编码字节 (
0xC3
和0xB3
) 被解释为 ISO-Latin-1 字符“à”和“³”。 - 这些字符被保存为其 UTF-8 表示形式(
0xC383
和0xC2B3
)。
该文件现在包含字节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)。