Essentially I made a request to a website and got a byte response back: b'[{"geonameId:"703448"}..........'.
I'm confused because although it is of type byte, it is very human readable and appears like a list of json. I do know that the response is encoded in latin1 from running r.encoding
which returned ISO-859-1
and I have tried to decode it, but it just returns an empty string. Here's what I have so far:
r = response.content
string = r.decode("ISO-8859-1")
print (string)
and this is where it prints a blank line. However when I run
len(string)
I get: back 31023
How can I decode these bytes without getting back an empty string?
Did you try to parse it with the json
module?
import json
parsed = json.loads(response.content)
Another solution is to use response.text, which returns the content in 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.
There is r.text
and r.content
. The first one is a string, the second one is bytes.
You want
import json
data = json.loads(r.text)
来源:https://stackoverflow.com/questions/31708519/request-returns-bytes-and-im-failing-to-decode-them