2011-10-01 41 views
6

此行如何編碼('ascii','ignore')拋出UnicodeDecodeError?

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) 

爲什麼?我認爲,因爲我使用'忽略',當將輸出保存爲字符串變量的值時,解碼錯誤應該是不可能的。

+0

問題是與_decoding_,不_encoding_。他們不一樣。 – agf

+0

'get_url_contents'嗎?這看起來像是該函數中引發的異常,而不是'encode'。 –

+0

@Trindaz,0xc3不是一個ASCII字符。 –

回答

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功能,但我所上述是我最好的猜測。)

相關問題