Unicode 中有些非凡的字符,能够由其余不同的特殊字符组合进去。例如 ñ
(U+00F1) 和 ñ
(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。
- 把
-
重组:就是把拆开的字符能组的再全组起来,例如:
- 把
ñ
(U+006E U+0303) 组合成 U+00F1。
- 把
-
-
规范与兼容:
-
规范等价:就是只有含意和长得完全相同的两个字符才相等,例如:
ñ
(U+00F1) 和ñ
(U+006E U+0303) 能够相等;- 但
ff
(U+FB00) 和ff
(U+0066 U+0066) 不能相等。
-
兼容等价:就是只有长得差不多就能够相等了,规范等价的肯定也是兼容等价的,例如:
ff
(U+FB00) 和ff
(U+0066 U+0066) 也能够相等;ñ
(U+00F1) 和ñ
(U+006E U+0303) 更是能够相等了。
-
示例:
阐明 | 显示 | 标准化模式 | 标准化后 |
---|---|---|---|
合成与重组的区别 | ñ | NFD/NFKD | U+006E U+0303 |
合成与重组的区别 | ñ | NFC/NFKC | U+00F1 |
规范与兼容的区别 | ff | NFD/NFC | U+FB00 |
规范与兼容的区别 | ff | NFKD/NFKC | U+0066 U+0066 |
规范与兼容的区别 | ff | NFD/NFC/NFKD/NFKC | U+0066 U+0066 |
相干文章:
- 详解字符编码与 Unicode