モジュール java.base
パッケージ java.text

クラスNormalizer

java.lang.Object
java.text.Normalizer

public final class Normalizer extends Object
このクラスは、テキストのソートや検索が容易になるようにUnicodeテキストをそれと等価な合成形式または分解形式に変換する、normalizeメソッドを提供します。 normalizeメソッドは、「Unicode Standard Annex#15-Unicode Normalization Forms」に記述されている標準の正規化形式をサポートしています。

Unicodeでは、アクセントなどの修飾の付いた文字をいくつかの方法で符号化できます。 文字A-acuteを例にとってみましょう。 これは、Unicodeでは単一の文字(合成形式)として符号化できます。

      U+00C1    LATIN CAPITAL LETTER A WITH ACUTE
または、2つの独立した文字(分解形式)として符号化できます。
      U+0041    LATIN CAPITAL LETTER A
      U+0301    COMBINING ACUTE ACCENT
ただし、プログラムのユーザーにとっては、どちらのシーケンスも、ユーザー・レベルでは同じ文字「acuteアクセント付きのA」として扱われるべきです。 テキストの検索や比較を行うときに、これら2つのシーケンスが等価に扱われることを確認する必要があります。 また、複数のアクセントを持つ文字も処理する必要があります。 文字の結合アクセントの順序が重要になる場合もあれば、アクセントの順序が異なっても実際には等価になる場合もあります。

同様に、文字列「ffi」は、3つの独立した文字として符号化できます。

      U+0066    LATIN SMALL LETTER F
      U+0066    LATIN SMALL LETTER F
      U+0069    LATIN SMALL LETTER I
または、単一の文字として符号化できます。
      U+FB03    LATIN SMALL LIGATURE FFI
合字ffiは、区別可能な意味上の文字ではなく、厳密にはUnicodeに含まれるべきではありません。ただし、既存の文字セットですでに提供されているため、その互換性のために含まれています。 Unicode標準では、このような文字を、それに対応する意味上の文字に「互換」分解することによって識別します。 検索や比較を行うとき、これらのマッピングを使用する必要がしばしば発生するでしょう。

上記の最初の例で示したように、normalizeメソッドでテキストを正規合成形式または正規分解形式に変換すると、このような問題を解決するのに役立ちます。 また、このメソッドで互換分解を実行して、互換文字をその等価な文字と同じものとして扱うこともできます。 さらに、normalizeメソッドはアクセントを適切な正規の順序に並べ替えるので、ユーザーがアクセントの並べ替えについて心配する必要はありません。

W3Cでは、NFCでテキストを交換するよう一般に推奨しています。 また、従来の文字エンコーディングのほとんどは事前合成形式だけを使用し、それ自体では連結マークの符号化を行わない場合がよくあります。 このような文字エンコーディングへの変換を行うには、UnicodeテキストをNFCに正規化する必要があります。 使用例については、「Unicode Standard Annex」を参照してください。

導入されたバージョン:
1.6