2012-06-17 16 views
6

Kitabın örnek kodunu "Sosyal Web'i Madencilik", 1-3'e uymaya çalışıyorum.twitter trends api UnicodeDecodeError: 'utf8' codec'i bayt 0x8b'yi çözemez konum 1: beklenmedik kod bayt

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

Ve hata bilgisi: Ben kodu uyguladığınızda

Ben bu yüzden web sayfası BAZEN enter link description here

AMA, yeni numune eski izleyin onun biliyorum, bir hata bilgisi yaşayacaktır şunun gibidir:

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 

Bu her zaman olmaz, ancak programcı böyle bir "rasgele" durumu beğenmez.

Bu konuda bana yardımcı olabilecek biri var mı? Sorun nedir ve bunu nasıl çözebilirim?

Büyük teşekkürler ~ varsayılan kod çözme By

+0

Ben piton İstekleri kullanarak bir kütüphanede bu görüyorum:

veri akışını halletmek için. '0x8b', gzip başlığından gelir:' 1F 8B 08'. Bir şey, bunun gzip sıkıştırılmış veri olduğu gerçeğini kaçırıyor. –

+1

Güncelleme: Bu [hata 2561 istekleri] nedeniyle oldu (https://github.com/kennethreitz/requests/issues/2561). –

cevap

1

() buna nasıl çözümleyeceğinizden bilmediği bir bayt karşılaşırsa bir hata verir.

Bir hata atmamak ve sessizce göz ardı etmek için trend.decode('utf-8', 'replace') veya trend.decode('utf-8', 'ignore') numaralı sayfaları kullanabilirsiniz.

Documentation on decode() here.

16

byte 0x8b in position 1 genellikle veri akımı gzip'lenmiş olduğunu işaret eder. Benzer sorunlar için, bkz here ve here.

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

Bunu işaret ettiğiniz için teşekkür ederiz. Yanlışlıkla, gzip olmak zorunda olmayan bazı dosyaları gziplediğimi keşfetmeme yardımcı oldu. – dmh