複数の言語のテキストを含むUTF-8形式のファイルがあります。多くの人の名前があります。これをASCIIに変換し、結果ができるだけ適切に見えるようにする必要があります。
より広いエンコーディングをより狭いエンコーディングに変換する方法はいくつかあります。最も簡単な変換は、ASCII以外のすべての文字を「_」などの一部のプレースホルダに置き換えることです。ファイルの言語を知っていれば、ローマ字表記などの他の可能性があります。
UTF-8からASCIIへの適切な(最善の努力)変換を提供できるUnixツールまたはプログラミング言語ライブラリはUnixで利用可能ですか?
ほとんどのテキストはヨーロッパのラテン語です。
ベストアンサー1
これは次のような場合に便利です。
iconv -f utf-8 -t ascii//TRANSLIT
echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT
返品helloe ?
。変換方法を知らない文字はiconv
疑問符で置き換えられます。
iconv
POSIXですが、すべてのシステムにこのオプションがあるかどうかはわかりませんTRANSLIT
。それはLinuxで私に効果的です。また、このIGNORE
オプションは、ターゲット文字セットで表現できない文字を自動的に削除します(参考資料を参照man iconv_open
)。
さらに悪いことは、POSIX互換オプションを使用することですtr
。このコマンドは、ASCII以外のすべてのコードポイントを疑問符で置き換えます。 UTF-8テキストを一度に1バイトずつ読みます。 「E」は、アクセント結合または事前構成文字を使用して符号化されるかどうかに応じてE?
置き換えることができる。?
echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'
例では、caf? ?????
事前設定された文字を使用して返します。