5

UTF-8 文字を含む std::string があります。
文字列を ASCII 文字に最も近いものに変換したいと考えています。

例えば:

Łódź => Lodz
Assunção => Assuncao
Schloß => Schloss

残念ながら、ICU ライブラリは非常に直感的ではなく、その使用法に関する適切なドキュメントが見つからないため、使用方法を習得するには時間がかかりすぎます。時間がありません。

誰かがこれをどのように行うことができるかについて少し例を挙げてもらえますか??
ありがとう。

4

5 に答える 5

4

これを試してみてください、ucnv_convert("US-ASCII", "UTF-8", targer, targetsize, source, sourcesize, pError)

于 2008-11-13T08:32:38.780 に答える
3

ICU については知りませんが、ICONV はこれを行っており、非常に簡単に習得できます。それは約3〜4回の呼び出しであり、あなたの場合に必要なのは、を使用してICONV_SET_TRANSLITERATEフラグを使用することiconvctl()です。

于 2008-10-07T04:21:57.953 に答える
1

分解してから置換を行うコールバックを作成しました。それはおそらく音訳として実装される可能性があります。コードはここdecompcb.cで、ヘッダーは近くにあります。Unicode-to-ASCII コンバーターに次のようにインストールします。

ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status);

次に、gConverter を使用して Unicode から ASCII に変換します

于 2009-10-07T17:48:18.653 に答える
0

ß->ss分解は、互換性分解が必要であることを示しています。ICUでは、そのためのクラスノーマライザーが必要です。その後、L'odz'のようなものになります。この文字列から、ASCII以外の文字を簡単に削除できます。ICUは必要ありません。プレーンSTLで十分です。

于 2008-10-07T11:56:18.847 に答える
0

これは私が専門とする分野ではありませんが、簡単に実行できる便利なライブラリがない場合は、UTF-8 を含むルックアップ テーブル/マップを作成する方がよいかもしれません ->アスキー値。すなわち。キーは UTF-8 文字で、値は文字の ASCII シーケンスです。

于 2008-10-07T04:25:24.657 に答える