Demande de renvoie octets, et je ne suis pas à décoder
En fait, j'ai fait une demande pour un site web et a obtenu un octet réponse: b'[{"geonameId:"703448"}..........'.
je suis confondu parce que même s'il est de type byte, il est très lisible et semble comme une liste de json. Je sais que la réponse est codée en latin1 de l'exécution de r.encoding
qui a retourné ISO-859-1
et j'ai essayé de le décoder, mais elle retourne une chaîne vide. Voici ce que j'ai à ce jour:
r = response.content
string = r.decode("ISO-8859-1")
print (string)
et c'est là où il imprime une ligne vide.
Cependant quand je lance
len(string)
J'obtiens: retour 31023
Comment décoder ces octets sans obtenir en retour une chaîne vide?
- en python 2.x le b préfixe sera la cause de la chaîne entouré de devenir un type
str
vous pouvez avoir certains caractères codés déjà caché quelque part à l'intérieur. Sur Python 3.x vous recevrez unbytes
littérale. pourquoi pensez-vous que vous avez besoin pour effectuer un codage/décodage? - Parce que j'ai besoin de parser le json, et j'ai juste essayé de boucler sur elle: avec
for i in range(len(contents)): print content[i]
et c'est juste l'impression de beaucoup de chiffres.
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de l'analyser avec le
json
module?JSON object must be str, not 'bytes'
json.loads(response.content.decode('latin1'))
?content.decode
commentaire directement à la réponse.Une autre solution est d'utiliser la réponse.le texte, qui renvoie le contenu en unicode
Il est
r.text
etr.content
. La première est une chaîne de caractères, la seconde est d'octets.Vous voulez