2012-06-17 24 views
6

Tôi đang cố gắng làm theo mã mẫu của cuốn sách "Khai thác web xã hội", 1-3.twitter xu hướng api UnicodeDecodeError: 'utf8' codec không thể giải mã byte 0x8b ở vị trí 1: byte mã không mong muốn

Tôi biết nó cũ vì vậy tôi làm theo mẫu mới từ trang web enter link description here

Nhưng, đôi khi, tôi sẽ bị ảnh hưởng một thông tin báo lỗi khi tôi thực hiện các mã:

[ trend.decode('utf-8') for trend in world_trends()[0]['trends'] ] 

Và các thông tin lỗi như sau:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "build/bdist.macosx-10.6-universal/egg/twitter/api.py", line 167, in __call__ 
File "build/bdist.macosx-10.6-universal/egg/twitter/api.py", line 173, in _handle_response 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/utf_8.py", line 16, in decode 
return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: unexpected code byte 

Nó không luôn xảy ra, nhưng tôi nghĩ không có lập trình viên nào thích trường hợp "ngẫu nhiên" như vậy.

Vì vậy, bất kỳ ai cũng có thể giúp tôi về vấn đề này? Whats vấn đề và làm thế nào tôi có thể giải quyết điều này?

Cảm ơn tuyệt vời ~

+0

tôi nhìn thấy này trong thư viện sử dụng yêu cầu python. '0x8b' xuất phát từ tiêu đề gzip:' 1F 8B 08'. Một cái gì đó là thiếu thực tế rằng đây là dữ liệu nén gzip. –

+1

Cập nhật: Điều này là do [lỗi 2561 yêu cầu] (https://github.com/kennethreitz/requests/issues/2561). –

Trả lời

1

Bằng cách giải mã mặc định() sẽ phát sinh lỗi nếu nó gặp byte không biết cách giải mã.

Bạn có thể sử dụng trend.decode('utf-8', 'replace') hoặc trend.decode('utf-8', 'ignore') để không ném lỗi và âm thầm bỏ qua lỗi đó.

Documentation on decode() here.

16

byte 0x8b in position 1 thường báo hiệu rằng các dòng dữ liệu được gzip. Đối với các sự cố tương tự, hãy xem herehere.

Để giải nén các luồng dữ liệu:

buf = StringIO.StringIO(<response object>.content) 
gzip_f = gzip.GzipFile(fileobj=buf) 
content = gzip_f.read() 
+0

Cảm ơn bạn đã chỉ ra điều này. Giúp tôi khám phá ra rằng tôi đã vô tình gzipped một số tập tin mà không có nghĩa là để được gzipped. – dmh

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