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 |
相关文章:
标签:006E,00F1,标准化,0066,Unicode,0303,Normalization From: https://www.cnblogs.com/val3344/p/16706152.html