Unicode 标准化

Unicode 中有些特殊的字符,可以由其他不同的特殊字符组合出来。例如 ? (U+00F1) 和 n? (U+006E U+0303)。这两个字符在展现和含义上是完全等价的,但其编码却是不同的。为了对这种字符进行比较,就需要在比较前先进行标准化 (Normalization) 处理。
Unicode 定义了四种标准化形式 (Unicode Normalization Form):

分解 分解再重组
标准等价 NFD (Normalization Form Canonical Decomposition) NFC (Normalization Form Canonical Composition)
兼容等价 NFKD (Normalization Form Compatibility Decomposition) NFKC (Normalization Form Compatibility Composition)
说明:
  • 分解与重组:
    • 分解:就是把字符能拆的全拆开,例如:
      • ? (U+00F1) 拆成 U+006E U+0303。
    • 重组:就是把拆开的字符能组的再全组起来,例如:
      • n? (U+006E U+0303) 组合成 U+00F1。
  • 标准与兼容:
    • 标准等价:就是只有含义和长得完全相同的两个字符才相等,例如:
      • ? (U+00F1) 和 n? (U+006E U+0303) 可以相等;
      • ? (U+FB00) 和 ff (U+0066 U+0066) 不能相等。
    • 兼容等价:就是只要长得差不多就可以相等了,标准等价的一定也是兼容等价的,例如:
      • ? (U+FB00) 和 ff (U+0066 U+0066) 也可以相等;
      • ? (U+00F1) 和 n? (U+006E U+0303) 更是可以相等了。
示例:
说明 显示 标准化形式 标准化后
分解与重组的区别 ? NFD/NFKD U+006E U+0303
分解与重组的区别 n? NFC/NFKC U+00F1
标准与兼容的区别 ? NFD/NFC U+FB00
标准与兼容的区别 ? NFKD/NFKC U+0066 U+0066
标准与兼容的区别 ff NFD/NFC/NFKD/NFKC U+0066 U+0066
【Unicode 标准化】相关文章:
  • 详解字符编码与 Unicode

    推荐阅读