Запрос возвращает байты, и я не могу их декодировать

по существу, я сделал запрос на веб-сайт и получил байтовый ответ:b'[{"geonameId:"703448"}..........'. Я смущен, потому что, хотя он имеет тип byte, он очень удобочитаем и выглядит как список json. Я знаю, что ответ закодирован в latin1 от запуска r.encoding, который возвращен ISO-859-1 и я пытался его расшифровать, но он просто возвращает пустую строку. Вот что у меня пока есть:

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

и здесь он печатает пустую строку. Однако, когда я бегу

len(string)

Я получаю: назад 31023 Как я могу декодировать эти байты, не возвращая пустую строку?

2 ответов


вы пытались разобрать его с json модуль?

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

другое решение - использовать response.текст, который возвращает содержимое в 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.