複数の言語のテキストを含むUTF-8のファイルがあります。それの多くは人の名前です。私はそれをASCIIに変換する必要があり、結果はできるだけ適切に見えるようにする必要があります。
広いエンコーディングから狭いエンコーディングに変換する方法はたくさんあります。最も単純な変換は、すべての非ASCII文字を「_」などのプレースホルダーに置き換えることです。ファイルが記述されている言語がわかっている場合は、ローマ字化などの追加の可能性があります。
Unixで利用可能などのUnixツールまたはプログラミング言語ライブラリで、UTF-8からASCIIへの適切な(ベストエフォート)変換が可能ですか?
ほとんどのテキストは、ラテン系のラテン語ベースの言語です。
konwert utf8-ascii
変換テーブルに応じて、ベストエフォートの変換を行います。入力言語をおおよそ知っている場合、より良い結果を与える言語固有のフィルターがあります。
konwert utf8-xmetodo
エスペラントをx-メトード表現に変換したものです
konwert UTF8-tex
分音記号のTeX表現を試みますが、言語固有のパラメーターがあります。
konwert UTF8-ascii/de
「ä」を単なる「a」の代わりに「ae」(ドイツ語の慣習)に音訳します
konwert UTF8-ascii/rosyjski
「英語のような」ルールの代わりに、ロシア語を音訳するためにポーランドのルールを使用します...
これはいくつかのことで機能します:
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?
または?
に置き換えられる場合があります。
echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'
この例では、合成文字を使用してcaf? ?????
を返します。
uni2ascii -B input.txt >output.txt
私はこのために Text :: Unidecode でPerlを使用することになりました。例:
Perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")
bd llh lthny bn lHsyn
を生成します。これは、私の目的にとって許容できる結果です。
複数の言語の[人々の名前]を含むUTF-8のファイルがあります[ASCIIで意味のあるものに変換したい]
次の名前をいくつかのASCII文字列に変換できるようにしたいという意味ですか?関係者が反対しない文字列ですか?
これを行うことができる自動化されたツールはないと思います。個人名のラテン語化はないか、非常に多くあります。ソフトウェアは文化的に受け入れられるバージョンを選択できません。少なくとも、ソフトウェアが関係者の文化について多くを知ることなしには。