Python将unicode转换为ASCII

时间:2014-08-05 17:44:05

标签: python unicode encoding

我有一个字符串列表,其中包含与拉丁语类似的各种不同字符,我从使用urllib2下载的网站上获取这些字符串。该网站采用utf-8编码。但是,在尝试了很多变化后,我无法弄清楚如何将其转换为简单的ASCII等价物。例如,我所拥有的一个字符串是:

u'Atl\xc3\xa9tico Madrid'

在纯文本中,它是“马德里竞技”,我想要的是将其改为“马德里竞技”。 如果我在这上面使用简单的unidecode,我会得到“AtlA(c)tico Madrid”。我做错了什么?

1 个答案:

答案 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。