2011-10-01 20 views
6

Bu hatKodlama ('ascii', 'yoksay') bir UnicodeDecodeError?

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

bu hatayı

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

Neden

üretir? Bunu kabul ettim çünkü 'ignore' kullanıyorum çünkü çıktıyı bir string değişkenine bir değere kaydettiğinde deşifre hatalarının olması imkansız olmalı.

+0

sorun _decoding_ ile değil -

(o get_url_contents fonksiyonu ile ilgili olabilir Ama ne ben yukarıda açıklanan en iyi benim tahminim Tabii ki, ben bu sorun olduğunu bilmiyorum.) _encoding_. Aynı değiller. – agf

+0

Wt 'get_url_contents' yapmıyor mu? Bu, bu fonksiyonda istisna kaldırılmış gibi görünüyor, 'kodlamak' değil. –

+0

@Trindaz, 0xc3 bir ASCII karakteri değil. –

cevap

3

Python 2 tuhaflığı nedeniyle, bir bayt dizesinde (yani önceden kodlanmış olan metin) encode numaralı telefonu arayabilirsiniz. Bu durumda, ilk önce ascii ile kod çözme yoluyla bir unicode nesnesine dönüştürmeye çalışır.

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

Python 3, bayt dizelerin encode yöntemi yoktur, bu nedenle aynı sorunu sadece AttributeError neden olur: get_url_contents bir bayt dize döndürüyor Yani, satır etkin bir yapar. ,