web-dev-qa-db-fra.com

Demander des octets de retour et je ne parviens pas à les décoder

J'ai essentiellement demandé à un site Web et obtenu une réponse sur un octet: b'[{"geonameId:"703448"}..........'. Je suis confus, car bien que ce soit du type octet, il est très lisible par l'homme et ressemble à une liste de json. Je sais que la réponse est codée en latin1 à partir de l'exécution de r.encoding qui a renvoyé ISO-859-1 et que j'ai essayé de le décoder, mais il ne renvoie qu'une chaîne vide. Voici ce que j'ai jusqu'à présent:

r = response.content
string = r.decode("ISO-8859-1")
print (string)

et c’est là qu’elle affiche une ligne vierge. Cependant, quand je cours 

len(string)

Je reçois: retour 31023 Comment puis-je décoder ces octets sans récupérer une chaîne vide?

12
koda gates

Avez-vous essayé de l'analyser avec le module json?

import json
parsed = json.loads(response.content)
9
mzc

Une autre solution consiste à utiliser response.text, qui renvoie le contenu en unicode.

Type:        property
String form: <property object at 0x7f76f8c79db8>
Docstring:  
Content of the response, in unicode.

If Response.encoding is None, encoding will be guessed using
``chardet``.

The encoding of the response content is determined based solely on HTTP
headers, following RFC 2616 to the letter. If you can take advantage of
non-HTTP knowledge to make a better guess at the encoding, you should
set ``r.encoding`` appropriately before accessing this property.
15
salah

Il y a r.text et r.content. Le premier est une chaîne, le second est des octets.

Tu veux

import json

data = json.loads(r.text)
1
Martin Thoma