Python将unicode转换为ASCII
我有一个字符串列表,这些字符串具有各种不同的字符,类似于拉丁字符,我从一个网站上获得这些字符串,我使用urllib2下载这些字符串。该网站采用utf-8编码。然而,在尝试了许多变体之后,我不知道如何将其转换为简单的ASCII等价物。例如,我的一个字符串是:Python将unicode转换为ASCII,python,unicode,encoding,Python,Unicode,Encoding,我有一个字符串列表,这些字符串具有各种不同的字符,类似于拉丁字符,我从一个网站上获得这些字符串,我使用urllib2下载这些字符串。该网站采用utf-8编码。然而,在尝试了许多变体之后,我不知道如何将其转换为简单的ASCII等价物。例如,我的一个字符串是: u'Atl\xc3\xa9tico Madrid' 在纯文本中,它是“马德里竞技”,我想要的是,将它改为“马德里竞技”。 如果我使用简单的unidecode,我会得到“AtlA(c)tico Madrid”。我做错了什么?Unicode字符
u'Atl\xc3\xa9tico Madrid'
在纯文本中,它是“马德里竞技”,我想要的是,将它改为“马德里竞技”。
如果我使用简单的unidecode,我会得到“AtlA(c)tico Madrid”。我做错了什么?Unicode字符串中有UTF-8字节。这不是一个合适的Unicode字符串,这是一个: 首先修复字符串:
>>> 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'
更好的方法是首先正确读取数据;您似乎已将数据解码为拉丁语-1(或Windows CP-1252代码页),而不是UTF-8。您的解决方案显然有效,但在阅读了最后一部分后,我意识到我可以在urllib2请求read()之后添加.decode(“UTF-8”),因此现在我可以简单地运行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'