最近、UTF-8とISO-Latin-1の間の変換時に内容が完全に焼かれたいくつかの破損したファイルが見つかりました。このファイルをどのように回復できますか?
関連する破損したテキストを生成するプロセスは次のとおりです。
- 元のテキスト「ó」はUTF-8(
0xC3B3
)として保存されます。 - エンコードされたバイト(
0xC3
および0xB3
)は、ISO-Latin-1文字「à」および「3」として解釈されます。 - これらの文字は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として扱われます)を残します。