Python将Unicode转换为ASCII

0 投票
1 回答
1547 浏览
提问于 2025-04-18 16:06

我有一个字符串列表,这些字符串里有一些看起来像拉丁字母的不同字符。我是通过urllib2从一个网站下载这些字符串的。这个网站使用的是utf-8编码。不过,我试了很多方法,还是不知道怎么把这些字符转换成简单的ASCII字符。举个例子,我有一个字符串是:

u'Atl\xc3\xa9tico Madrid'

它的原文是“Atlético Madrid”,我想把它改成“Atletico Madrid”。如果我简单地用unidecode处理这个字符串,我得到的是“AtlA(c)tico Madrid”。我哪里出错了呢?

1 个回答

9

你有一些UTF-8字节在一个Unicode字符串里。这不是一个正确的Unicode字符串,而是出现了乱码:

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

撰写回答