「Any-Latin」を使用して ICU をラテン語に音訳することができますが、これには、Latin1 コードページにないマクロンなどの文字が含まれます。「Any-Latin; Latin-ASCII」を使用してASCIIに音訳することはできますが、有効なLatin1文字であるアクセント付き文字をすべて失います。特に「Any-ISO_8859_1」を実行する何かが必要です
それを行う唯一の方法は、一連のカスタム ルールを構築することです。たとえば、Latin に変換してから、マクロンなど、Latin1 以外のものをすべて削除します。
UnicodeString Latin1_Rules(
"::Any-Latin; "
"::nfd; ::[\\u0304] remove; ::nfc;"
// etc...
);
// Create a custom Transliterator
icu::Transliterator* trans = icu::Transliterator::createFromRules("Latin1",
Latin1_Rules,
UTRANS_FORWARD,
...
しかし、他に何を削除する必要があるのか わかりません。このソリューションは非常に不器用で、おそらく非常に遅いように見えます。それが正しいと100%確信できるかどうかはわかりません.
より良い (より簡単で速い) 方法があれば、私は ICU と結婚していません。しかし、私は C/C++ で立ち往生しています。
明確にするために、これはIs there a way to convert from UTF8 to iso-8859-1?と同じ質問ではありません。 その質問は、コンテンツが iso-8859-1 のみであることが既にわかっている場合のエンコーディング間の変換に関するものです。変換は文字を 1 対 1 でマップし、ターゲットのエンコーディングでサポートされていない文字については失敗します。
私の質問は、音訳についてです。たとえば、牛のような漢字を「牛」に音訳してほしい。