如何使用Python反转Unicode分解?

2024-04-28 13:44:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Dinis e Isabel, uma difı´cil relac¸a˜o conjugal e polı´tica

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

Dinis e Isabel, uma difícil relação conjugal e política


Tags: 对象方法文本unicodedifpolumacil
3条回答

我真的不能给你一个确切的答案,因为我从来没有试过。但是在标准库中有一个unicodedata module。它有两个函数decomposition()normalize(),可能对您有帮助。在

编辑:确保它真的被分解成unicode。有时有一些奇怪的方法来编写无法直接用编码表示的字符。比如"a,它是指由人类或某个专门程序在精神上解析为ä。在

Unfortunately it seems I actually have (for example) \u00B8 (cedilla) instead of \u0327 (combining cedilla) in my text.

呃,真恶心!您仍然可以自动执行此操作,尽管该过程不会完全无损,因为它涉及兼容性分解(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)

我想你是在找这个:

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

相关问题 更多 >