Module java.base
Package java.text

Class 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    拉丁大写字母A带有重音
或作为两个单独的字符(“分解”形式):
      U+0041    拉丁大写字母A
      U+0301    组合重音符
但对于您程序的用户来说,这两个序列都应被视为相同的“用户级”字符“A带有重音”。 在搜索或比较文本时,您必须确保这两个序列被视为等效。 此外,您必须处理具有多个重音的字符。 有时,字符的组合重音的顺序很重要,而在其他情况下,不同顺序的重音序列实际上是等效的。

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

      U+0066    拉丁小写字母F
      U+0066    拉丁小写字母F
      U+0069    拉丁小写字母I
或作为单个字符
      U+FB03    拉丁小写字母连字FFI
ffi连字不是一个独立的语义字符,严格来说,它根本不应该出现在Unicode中,但为了与已经提供它的现有字符集兼容,它被包含在内。 Unicode标准通过为这些字符提供“兼容性”分解成相应的语义字符来识别这样的字符。 在排序和搜索时,您通常会希望使用这些映射。

normalize方法通过将文本转换为第一个示例中显示的规范组合和分解形式来解决这些问题。 此外,您可以让它执行兼容性分解,以便您可以将兼容性字符视为它们的等效字符。 最后,normalize方法将重音重新排列为正确的规范顺序,这样您就不必担心自己重新排列重音。

W3C通常建议在NFC中交换文本。 还要注意,大多数传统字符编码仅使用预组合形式,并且通常不单独编码任何组合标记。 要转换为这种字符编码,Unicode文本需要规范化为NFC。 有关更多用法示例,请参阅Unicode标准附录。

自版本:
1.6
外部规范