Изменить тип байта Python на строку - PullRequest
5 голосов
/ 19 сентября 2010

Я использую python для игры с API-интерфейсом stackoverflow.Я запускаю следующие команды:

f = urllib.request.urlopen('http://api.stackoverflow.com/1.0/stats')
d = f.read()

Тип d - это класс 'байты', и если я его печатаю, это выглядит так:

b'\x1f\x8b\x08\x00\x00\x00 .... etc

Я попытался d=f.read().decode('utf-8') как естькодировка, указанная в заголовке, но я получаю 'utf8' codec can't decode byte 0x8b in position 1" сообщение об ошибке

Как преобразовать объект байта, полученный от вызова urllib.request, в строку?

1 Ответ

6 голосов
/ 19 сентября 2010

Убедитесь, что ваше тело ответа не сжимается. Верьте его кодировке передачи или тому подобному для заголовка ответа, я уверен, что вы имеете дело со сжатыми данными, а не с проблемами кодировки набора символов.

обновление: Понимая, что у меня плохая привычка не объяснять / предоставлять достаточно деталей. Для байтовых строк Python gzip они всегда начинаются с 1f8b. Кто-то объясняет это лучше здесь https://stackoverflow.com/a/3703300/9908

...