unicodedata.normalize(form,unistr)如何工作?

时间:2013-02-04 07:48:10

标签: python unicode encoding normalization unicode-normalization

在API文档中,http://docs.python.org/2/library/unicodedata.html#unicodedata.normalize。它说

  

返回Unicode字符串 unistr 的正常格式表单。表单的有效值为“NFC”,“NFKC”,“NFD”和“NFKD”。

文档相当模糊,有人可以用一些例子解释valid values吗?

1 个答案:

答案 0 :(得分:23)

我发现文档非常清楚,但这里有一些代码示例:

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 number 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