我有一个字符串列表,其中包含与拉丁语类似的各种不同字符,我从使用urllib2下载的网站上获取这些字符串。该网站采用utf-8编码。但是,在尝试了很多变化后,我无法弄清楚如何将其转换为简单的ASCII等价物。例如,我所拥有的一个字符串是:
u'Atl\xc3\xa9tico Madrid'
在纯文本中,它是“马德里竞技”,我想要的是将其改为“马德里竞技”。 如果我在这上面使用简单的unidecode,我会得到“AtlA(c)tico Madrid”。我做错了什么?
答案 0 :(得分:8)
Unicode字符串中包含UTF-8字节。这是不正确的Unicode字符串,它是Mojibake:
>>> print u'Atl\xc3\xa9tico Madrid'
Atlético Madrid
首先修复你的字符串:
>>> u'Atl\xc3\xa9tico Madrid'.encode('latin1').decode('utf8')
u'Atl\xe9tico Madrid'
>>> print u'Atl\xc3\xa9tico Madrid'.encode('latin1').decode('utf8')
Atlético Madrid
和Unidecode将为您提供您的期望:
>>> import unidecode
>>> unidecode.unidecode(u'Atl\xc3\xa9tico Madrid')
'AtlA(c)tico Madrid'
>>> unidecode.unidecode(u'Atl\xc3\xa9tico Madrid'.encode('latin1').decode('utf8'))
'Atletico Madrid'
最好还是首先正确读取数据;您似乎已将数据解码为Latin-1(或可能是Windows CP-1252代码页)而不是UTF-8。