壊れたファイルで二重文字を見つけてUnicode単一文字に置き換えるには?

壊れたファイルで二重文字を見つけてUnicode単一文字に置き換えるには?

整理する必要がある長いフランス語のテキストファイルがあります。非ASCII文字は奇数文字の組み合わせに置き換えられました。たとえば、次のようになります。

誕生日おめでとうございます。

次のようにする必要があります。 (Unicodeテキストで)

通り過ぎる方々 幸せな年末をお過ごしください。

sedを試しましたが、成功しませんでした。友人がPerlを試してみることをお勧めしました。奇妙な文字シーケンスと正しい代替文字を含むテーブルを簡単に作成できます。理想的には、後で使用できるようにテーブルをスタンドアロンファイルにしたいと思います。このタイプの移行に推奨されるアプローチは何ですか?

ベストアンサー1

テキストがutf-8(Unix標準なので大丈夫)でエンコードされているように見えますが、何かがISO 8859-1 / MicrosoftのWindows Latin-1に読み込まれ、対応する解釈が出力されます。これを裏返す必要があります。

例えば

echo "passer de très bonnes fêtes de fin d'année" | iconv --to-code="ISO 8859-1"

これにより、壊れたエンコーディングが有効なUTF-8に変換されます。システムがutf-8で構成されている場合は、正しく読み取られます。

説明:これにより、echo è | od -t x116echo ê | od -t x1進コードがc3 a8 0a合計であることがわかり、ここを見るc3 aa 0aことができます。http://www.ascii-code.com/(これはASCIIではなくISO 8859-1コードです。)私たちは、このコードがè後ろêに見えない文字が来るのを見ることができます。今、私たちは何が間違っているのか知っています。 UTF-8を読みますが、ISO 8859-1として解釈することです。したがって、これを裏返す必要があります。読んでいる形式が何であれ、それをISO 8859-1(ここにあるものとは逆)に変換する必要があります。結果は有効なutf-8です。

おすすめ記事