web-dev-qa-db-ja.com

リクエストがバイトを返し、それらをデコードできません

基本的に、私はWebサイトにリクエストを送信し、バイト応答を返しました:b'[{"geonameId:"703448"}..........'.バイトタイプですが、それは人間が読むことができ、jsonのリストのように見えるため、混乱しています。 r.encodingを返したISO-859-1を実行して、latin1で応答がエンコードされていることを知っています。それをデコードしようとしましたが、空の文字列が返されます。ここに私がこれまで持っているものがあります:

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

これは、空白行を印刷する場所です。しかし走ると

len(string)

取得:back 31023空の文字列を返さずにこれらのバイトをデコードするにはどうすればよいですか?

23
koda gates

jsonモジュールで解析しようとしましたか?

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

別の解決策は、Unicodeでコンテンツを返すresponse.textを使用することです

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.
19
salah

有る r.textおよびr.content。最初の文字列は文字列、2番目の文字列はバイトです。

あなたが欲しい

import json

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