2014-12-04 100 views
2

我遇到了字符编码方面的一些问题,并且在波兰字符的这种特殊情况下。Python波兰字符编码问题

我需要用windows-1252等价物替换所有的非windows-1252字符。我有这个工作,直到我需要使用波兰人的角色。我该如何替换这些字符?

例如é是一个windows-1252字符,必须保持这种方式。但ł不是一个Windows-1252字符,必须用其等价物替换(或剥离,如果它没有等效)。

我尝试这样做:

import unicodedata 

text = "Racławicka Rógé" 
tmp = unicodedata.normalize('NFKD', text).encode('ascii', 'ignore') 
print(tmp.decode("utf-8")) 

此打印:

Racawicka Roge 

但现在óé都编码成oe

我该如何解决这个问题?

回答

3

如果你想要移动到1252,这就是你应该告诉什么encodedecode

>>> text = "Racławicka Rógé" 
>>> text.encode('1252', 'ignore').decode('1252') 
'Racawicka Rógé' 
+0

我在想什么......非常感谢!这正是我所需要的!想想很难! – Timo002 2014-12-04 15:35:54

0

如果没有大的文本处理,就像你的榜样,你可以利用Unidecode库与解决方案由jonrsharpe提供。

from unidecode import unidecode 

text = u'Racławicka Rógé' 
result = '' 

for i in text: 
    try: 
     result += i.encode('1252').decode('1252') 
    except (UnicodeEncodeError, UnicodeDecodeError): 
     result += unidecode(i) 

print result # which will be 'Raclawicka Rógé'