Module  java.base
软件包  java.text

Class 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 
    或作为两个单独的字符(“分解”形式):
      U+0041    LATIN CAPITAL LETTER A
          U+0301    COMBINING ACUTE ACCENT 
    然而,对于您的程序的用户,这两个序列应被视为相同的“用户级”字符“A与尖锐的口音”。 当您搜索或比较文本时,您必须确保这两个序列被视为等同的。 另外,您必须处理多个口音的字符。 有时,字符组合口音的顺序是重要的,而在其他情况下,不同顺序的重音序列确实是相当的。

    类似地,字符串“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方法normalize口音重新排列成正确的规范,让您不用担心自己的口音重排。

    W3C通常建议在NFC中交换文本。 还要注意,大多数遗留字符编码仅使用预先形式的形式,并且通常不会自己对任何组合标记进行编码。 要转换为这样的字符编码,Unicode文本需要归一化到NFC。 有关更多使用示例,请参阅Unicode标准附件。

    从以下版本开始:
    1.6