膨大な数の Unicode 文字の中で、2 つの 'f' 文字を表す U+FB00 合字 ff のように、実際には複数の文字を表すものがあります。このような文字を複数の単一文字に簡単に変換する方法はありますか? 標準の Java API で利用できるものが望ましいですが、必要に応じて外部ライブラリを参照することもできます。
3 に答える
U+FB00は互換キャラです。通常、Unicode は合字の個別のコードポイントをサポートしていません (合字を使用するかどうか、いつ使用するかはレイアウトの決定であり、データの保存方法に影響を与えるべきではないと主張しています)。合字を別個のエンティティとして表す古いエンコーディングとの往復変換の互換性を可能にするために、それらのいくつかはまだ存在しています。
幸いなことに、合字が表す文字の情報はUnicode データ ファイルにあり、ほとんどの有能な文字列処理システムにはそのデータが組み込まれています。
Java では、NormalizerクラスとNFKCフォームを使用する必要があります。
String ff ="\uFB00";
String normalized = Normalizer.normalize(ff, Form.NFKC);
System.out.println(ff + " = " + normalized);
これは印刷されます
ff = ff
あなたが話しているプロセスは正規化と呼ばれ、Unicode正規化フォームのテクニカルノートで指定されています。
Java SE クラス ライブラリには、java.text.Normalizerこのプロセスを実装するクラスが呼び出されます。ただし、必要な結果を得るためにどの「正規化形式」を使用する必要があるかを判断するには、上記のリンクにある Unicode ドキュメントを読む必要があります。それは簡単ではありません....
java.text.Normalizerを試すことができますが、それが合字で機能するかどうかはよくわかりません。