分类:
2008-12-15 17:25:36
|
1.1.3 讨论
一个字符有时可以有多个方法来表示。有时这是因为一些以前遗留下来的编码方法,像Latin1 里面那些包含变音符号的字符。这些字符可以直接用一个字符编码(比如U+00E7或者 LATIN SMALL LETTER C WITH CEDILLA)来表示,或者,通过基本字符尾跟一个combining character的方法来表示(比如U+0063或者LATIN SMALL LETTER C 尾跟一个U+0327或者COMBINING CEDILLA )。
有时候你可能要给一个基本字符添加2个以上的标记,这些标记在你的数据里面出现的先后顺序并不是固定的。假设你要给字符c 添加变音标记,以及在顶部添加caron标记来形成这样的字符: 。那么用下面的任意一种方法都可以实现:
|
标准化函数可以对它们重新安排成可靠的顺序。这样的函数有一些,包括进行标准分解的函数NFD( )跟标准分解后再进行标准组合的NFC函数。不管使用了上面3种方法中的哪一种来表示字符,它的NFD版本是v99.807.780,NFC版本是v231.780。
有时你可能更喜欢用NFKD( ) 跟 NFKC( ), 它们跟前面提到的NFD,NFC是类似的, 只是在分解的时候采用的是兼容分解(compatible decomposition)而不是标准分解,NFKC在组合的时候还是继续采用标准组合。举个例子,\x{FB00} 表示的是2个f联结在一起的字符(the double-f ligature)。它的NFD and NFC 格式是一样的:"\x{FB00}", 但是它的NFKD跟NFKC格式却是包含2个字符的字符串: "\x{66}\x{66}".
1.2.4 参考
参考本章开头的字符编码一节,有关unicode::normalize模块的资料,在菜单8.20中