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?
Avez-vous essayé de l'analyser avec le module json
?
import json
parsed = json.loads(response.content)
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.
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)