模块 java.base
 java.text

类 Normalizer

java.lang.Object
java.text.Normalizer

public final class Normalizer extends Object
此类提供方法 normalize 将 Unicode 文本转换为等效的组合或分解形式,以便更轻松地对文本进行排序和搜索。 normalize 方法支持 Unicode 标准附件 #15 — Unicode 规范化形式 中描述的标准规范化形式。

带有重音符号或其他装饰的字符可以在 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