2010-09-19 6 views
4

J'utilise python pour jouer avec l'API stackoverflow. Je lance les commandes suivantes:Modifier le type d'octet python en chaîne

f = urllib.request.urlopen('http://api.stackoverflow.com/1.0/stats') 
d = f.read() 

Le type de d est la classe « octets » et si je l'imprimer, il ressemble à:

b'\x1f\x8b\x08\x00\x00\x00 .... etc 

J'ai essayé d=f.read().decode('utf-8') comme cela est le charset indiqué dans l'en-tête , mais je reçois un message d'erreur 'utf8' codec can't decode byte 0x8b in position 1"

Comment puis-je convertir l'objet byte que j'ai reçu de mon appel urllib.request en une chaîne?

Répondre

5

Assurez-vous que le corps de votre réponse n'est pas gzippé. Croyez son codage de transfert ou similaire pour l'en-tête de réponse, j'ai une grande confiance que vous traitiez avec des données compressées et non des problèmes de codage de jeu de caractères. Mise à jour: Réalisant que j'ai une mauvaise habitude de ne pas expliquer/fournir suffisamment de détails. Pour les chaînes de caractères python gzip'd, elles commencent toujours par 1f8b Quelqu'un l'explique mieux ici https://stackoverflow.com/a/3703300/9908

+1

vous l'avez. Je l'ai résolu avec ce qui suit: import zlib decompressed_data = zlib.decompress (f.read(), 16 + zlib.MAX_WBITS) – amccormack