如何编码('ascii','ignore')抛出UnicodeDecodeError?

时间:2011-10-01 22:56:43

标签: python unicode-string

这一行

data = get_url_contents(r[0]).encode('ascii', 'ignore')

产生此错误

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11450: ordinal not in range(128)

为什么呢?我假设因为我使用'忽略',在将输出保存为字符串变量的值时,不可能出现解码错误。

1 个答案:

答案 0 :(得分:3)

由于Python 2的怪癖,您可以在字节字符串(即已编码的文本)上调用encode。在这种情况下,它首先尝试通过使用ascii解码将其转换为unicode对象。因此,如果get_url_contents返回一个字节字符串,那么您的行有效地执行此操作:

get_url_contents(r[0]).decode('ascii').encode('ascii', 'ignore')

在Python 3中,字节字符串没有encode方法,因此同样的问题只会导致AttributeError。

(当然,我不知道这是问题 - 它可能与get_url_contents功能有关。但我上面描述的是我最好的猜测)