2012-06-17 15 views
6

Estoy intentando seguir el código de muestra del libro "Minería de la red social", 1-3.twitter trends api UnicodeDecodeError: 'utf8' codec no puede decodificar byte 0x8b en posición 1: código inesperado byte

Sé que es viejo, así que sigo la nueva muestra de la página web enter link description here

Pero, a veces, voy a sufrir una información de error cuando implemente el código:

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

Y la información de error es así:

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 

No siempre ocurre, pero creo que a ningún programador le gusta un caso "aleatorio".

Entonces, ¿alguien podría ayudarme en este tema? ¿Cuál es el problema y cómo puedo resolver esto?

Grandes gracias ~

+0

que estoy viendo esto de una biblioteca utilizando solicitudes de pitón. El '0x8b' proviene del encabezado gzip:' 1F 8B 08'. A algo le falta el hecho de que se trata de datos comprimidos gzip. –

+1

Actualización: Esto se debió a [error 2561 de solicitudes] (https://github.com/kennethreitz/requests/issues/2561). –

Respuesta

1

Por decodificación predeterminado() generará un error si encuentra un byte que no sabe cómo descodificar.

Puede usar trend.decode('utf-8', 'replace') o trend.decode('utf-8', 'ignore') para no arrojar un error y silenciosamente ignorarlo.

Documentation on decode() here.

16

byte 0x8b in position 1 suele indicar que el flujo de datos se gzipped. Para problemas similares, vea here y here.

para descomprimir el flujo de datos:

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

Gracias por señalar esto. Me ayudó a descubrir que inadvertidamente había descomprimido algunos archivos que no estaban destinados a ser comprimidos. – dmh

Cuestiones relacionadas