UTF8でエンコードされた非ASCII文字をPerlでASCIIに変換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/638060

質問

ソフトウェアを登録した人の名前を送信するために、サードパーティによって呼び出されるPerlスクリプトがあります。これらのパーティの1つはUTF-8で名前をエンコードするため、Encode :: decode_utf8(...)を使用してUTF-8をASCIIにデコードするようにスクリプトを適宜変更しました。

これは通常は正常に機能しますが、6か月ごとに1つの名前にキリル文字、ギリシャ文字、またはルーマニア文字が含まれているため、名前をデコードすると"ПÐなどの文字化けが発生します¾Ð´Ñ€Ð°Ð¶Ð°Ð&# 189;ÑкаÑ"お客様にフォローアップし、「ラテン文字バージョン」を依頼する必要があります。登録コードを発行するための彼の名前の。

では、そのような文字があるかどうかを検出し、必要に応じてそれらを最も近いASCII表現に自動的に変換できるPerlモジュールはありますか?

Lingua :: Cyrillic :: Translit :: ICAOとLingua :: DetectCharsetを使用してキリル文字を処理できるようですが、他の文字セットでも機能するものを好むでしょう。

役に立ちましたか?

解決

Text :: Unidecode を使用できると思います。実行しようとしていること。

他のヒント

ASCIIの範囲にないUTF-8データを処理する必要がある場合、最善の策はバックエンドを変更してutf-8で窒息しないようにすることです。漢字記号の音訳はどうしますか?

キリル文字を取得した場合、「最も近いASCII表現」はありません。多くのキャラクター用。

Text :: Unicodeのドキュメントの「警告」の下に、このフレーズが正しくないようです:

入力データが本当にutf8文字列であることを確認してください。

UTF-8は可変長エンコードですが、Text :: Unidecodeは各文字に対して固定長(2バイト)エンコードのみを受け入れます。したがって、その文は次のようになります。

入力データが実際に2バイトUnicode文字列であることを確認してください。

これはUCS-2とも呼ばれます。

実際にutf8である文字列を変換する場合は、次のようにします。

my $decode_status = utf8::decode($input_to_be_converted);
my $converted_string = unidecode ($input_to_be_converted);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top