Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将unicode转换为ASCII_Python_Unicode_Encoding - Fatal编程技术网

Python将unicode转换为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字符

我有一个字符串列表,这些字符串具有各种不同的字符,类似于拉丁字符,我从一个网站上获得这些字符串,我使用urllib2下载这些字符串。该网站采用utf-8编码。然而,在尝试了许多变体之后,我不知道如何将其转换为简单的ASCII等价物。例如,我的一个字符串是:

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'