Python将unicode转换为ASCII

Lim*_*mon 0 python unicode encoding

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

u'Atl\xc3\xa9tico Madrid'
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 8

Unicode字符串中包含UTF-8字节.这不是一个合适的Unicode字符串,这是一个Mojibake:

>>> print u'Atl\xc3\xa9tico Madrid'
Atlético Madrid
Run Code Online (Sandbox Code Playgroud)

首先修复你的字符串:

>>> 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
Run Code Online (Sandbox Code Playgroud)

和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'
Run Code Online (Sandbox Code Playgroud)

最好还是首先正确读取数据; 您似乎已将数据解码为Latin-1(或可能是Windows CP-1252代码页)而不是UTF-8.