2011-10-01 23 views
6

Dòng nàyLàm thế nào để mã hóa ('ascii', 'ignore') ném UnicodeDecodeError?

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

sản xuất lỗi này

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

Tại sao? Tôi cho rằng vì tôi đang sử dụng 'bỏ qua' nên không thể giải mã được lỗi khi lưu đầu ra thành một giá trị cho một biến chuỗi.

+0

Vấn đề là với _decoding_, không _encoding_. Chúng không giống nhau. – agf

+0

Wt nào 'get_url_contents' làm gì? Điều này có vẻ như ngoại lệ được nêu ra trong hàm đó, không phải trong 'encode'. –

+0

@Trindaz, 0xc3 không phải là ký tự ASCII. –

Trả lời

3

Do một sự giả mạo của Python 2, bạn có thể gọi encode trên chuỗi byte (tức là văn bản đã được mã hóa). Trong trường hợp này, đầu tiên nó cố gắng chuyển đổi nó thành một đối tượng unicode bằng cách giải mã bằng ascii. Vì vậy, nếu get_url_contents đang trở lại một chuỗi byte, dòng của bạn một cách hiệu quả thực hiện điều này:

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

Trong Python 3, byte chuỗi không có một phương pháp encode, vì vậy cùng một vấn đề sẽ chỉ gây ra một AttributeError.

(Dĩ nhiên, tôi không biết rằng đây là vấn đề - nó có thể liên quan đến chức năng get_url_contents Nhưng những gì tôi đã mô tả ở trên là đoán tốt nhất của tôi.)

Các vấn đề liên quan