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/NFKDU+006E U+0303
合成与重组的区别nNFC/NFKCU+00F1
规范与兼容的区别NFD/NFCU+FB00
规范与兼容的区别NFKD/NFKCU+0066 U+0066
规范与兼容的区别ffNFD/NFC/NFKD/NFKCU+0066 U+0066

相干文章:

  • 详解字符编码与 Unicode