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 标准化】相关文章:
推荐阅读