如何使用Python反转Unicode分解?

时间:2009-01-15 10:08:25

标签: python unicode

使用Python 2.5,我有一些文本存储在unicode对象中:

  

Dinis e Isabel,umadifı'cilrelacéa〜o   夫妻关系

这似乎是decomposed Unicode。 Python中是否有通用的方法来反转分解,所以我最终得到:

  

Dinis e Isabel,umadifícilrelacção   夫妻共和国

3 个答案:

答案 0 :(得分:7)

我认为你正在寻找这个:

>>> import unicodedata    
>>> print unicodedata.normalize("NFC",u"c\u0327")
ç

答案 1 :(得分:5)

  

不幸的是,我的文本中似乎确实有(例如)\ u00B8(cedilla)而不是\ u0327(合并cedilla)。

哎呀!您仍然可以自动执行此操作,但该过程不会完全无损,因为它涉及兼容性分解(NFKD)。

将U + 00B8归一化为NFKD,你将获得一个空格,然后是U + 0327。然后,您可以扫描字符串,查找任何空格跟随组合字符的情况,并删除空格。最后重新组合到NFC,将组合字符放在前一个字符上。

s= unicodedata.normalize('NFKD', s)
s= ''.join(c for i, c in enumerate(s) if c!=' ' or unicodedata.combining(s[i+1])==0)
s= unicodedata.normalize('NFC', s)

答案 2 :(得分:1)

我无法真正给你一个明确的答案,因为我从未尝试过。但标准库中有unicodedata module。它有两个函数decomposition()normalize()可能会对您有所帮助。

编辑:确保它确实是分解的unicode。有时会有奇怪的方法来编写无法在编码中直接表达的字符。就像"a一样,它被人类或某些专门程序精神解析为ä