Request returns bytes and I'm failing to decode them

守給你的承諾、 提交于 2019-12-29 04:35:11

问题


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?


回答1:


Did you try to parse it with the json module?

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



回答2:


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.



回答3:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!