在Python中,是否有一种标准化的方法来标准化unicode字符串,以便它仅包含可用于表示它的最简单的unicode实体?我的意思是,一些东西,想翻译的顺序['LATIN SMALL LETTER A', 'COMBINING ACUTE ACCENT']来['LATIN SMALL LETTER A WITH ACUTE']?查看问题出在哪里:>>> import unicodedata>>> char = "á">>> len(char)1>>> [ unicodedata.name(c) for c in char ]['LATIN SMALL LETTER A WITH ACUTE']但现在:>>> char = "á">>> len(char)2>>> [ unicodedata.name(c) for c in char ]['LATIN SMALL LETTER A', 'COMBINING ACUTE ACCENT']当然,我可以遍历所有字符并进行手动替换等,但是效率不高,我敢肯定我会错过一半的特殊情况,并且会犯错误。
2 回答
MYYA
TA贡献1868条经验 获得超4个赞
该unicodedata模块提供一个.normalize()功能,您要标准化为NFC格式:
>>> unicodedata.normalize('NFC', u'\u0061\u0301')
u'\xe1'
>>> unicodedata.normalize('NFD', u'\u00e1')
u'a\u0301'
NFC或“普通形式组合”返回组成的字符,NFD,“普通形式分解”可为您提供分解的组合字符。
附加的NFKC和NFKD表格处理兼容性代码点。例如,U + 2160(罗马数字ONE)实际上与U + 0049(拉丁字母大写字母I)相同,但是在Unicode标准中存在,以保持与单独处理它们的编码的兼容性。使用NFKC或NFKD格式,除了组成或分解字符外,还将所有“兼容”字符替换为其规范形式:
>>> unicodedata.normalize('NFC', u'\u2167') # roman numeral VIII
u'\u2167'
>>> unicodedata.normalize('NFKC', u'\u2167') # roman numeral VIII
u'VIII'
注意,不能保证组合形式和分解形式是可交流的。将组合字符归一化为NFC形式,然后将结果转换回NFD形式并不总是产生相同的字符序列。Unicode标准维护例外列表 ; 出于各种原因,此列表中的字符是可组合的,但不能分解为它们的组合形式。另请参阅成分排除表中的文档。
添加回答
举报
0/150
提交
取消