模块  java.base
软件包  java.text

Class Normalizer


  • public final class Normalizer
    extends Object
    该类提供方法normalize ,其将Unicode文本转换为等效的组合或分解形式,允许更容易地排序和搜索文本。 normalize方法支持Unicode Standard Annex #15 — Unicode Normalization Forms中描述的标准规范化形式。

    带有重音符号或其他装饰的字符可以用Unicode以几种不同的方式编码。 例如,取角色A-acute。 在Unicode中,这可以编码为单个字符(“组合”形式):

      U+00C1    LATIN CAPITAL LETTER A WITH ACUTE 
    或者作为两个单独的字符(“分解”形式):
      U+0041    LATIN CAPITAL LETTER A
          U+0301    COMBINING ACUTE ACCENT 
    但是,对于程序的用户,这两个序列应被视为相同的“用户级”字符“A with acute accent”。 在搜索或比较文本时,必须确保将这两个序列视为等效。 此外,您必须处理具有多个重音的字符。 有时,角色组合重音的顺序很重要,而在其他情况下,不同顺序的重音序列实际上是等同的。

    类似地,字符串“ffi”可以编码为三个单独的字母:

      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标准附件。

    从以下版本开始:
    1.6