unicodedata.normalize(form, unistr)是如何工作的?
在API文档中,http://docs.python.org/2/library/unicodedata.html#unicodedata.normalize,上面写着:
返回Unicode字符串unistr的正常形式form。有效的形式值有‘NFC’,‘NFKC’,‘NFD’和‘NFKD’。
这个文档说得有点模糊,能不能给这些有效的值
解释一下,并举一些例子呢?
1 个回答
29
我觉得文档写得挺清楚的,不过这里有几个代码示例:
from unicodedata import normalize
print '%r' % normalize('NFD', u'\u00C7') # decompose: convert Ç to "C + ̧"
print '%r' % normalize('NFC', u'C\u0327') # compose: convert "C + ̧" to Ç
这两种'D'(代表分解)形式会把一个组合字符(比如 ä
)转换成两个字符(a
+ 两个点)。而这两种'C'(代表组合)形式则是反过来的操作。
这两种"K"形式是用来转换那些为了兼容性而添加到Unicode中的字符。举个例子,为了支持那些不能在符号周围画圈的软件,有一组“带圈数字”,比如 ①(Unicode编号是2460)。当我们对它进行标准分解(NFD)时,其实并没有任何变化:
print '%r' % normalize('NFD', u'\u2460') # u'\u2460'
但是,兼容性分解(NFKD)会返回相应的“兼容”字符:
print '%r' % normalize('NFKD', u'\u2460') # 1
想了解更多细节,可以查看这个链接:http://en.wikipedia.org/wiki/Unicode_equivalence。