我正在使用python来使用stackoverflow API。我运行以下命令:
f = urllib.request.urlopen('http://api.stackoverflow.com/1.0/stats')
d = f.read()
d的类型是'bytes'类,如果我打印它,它看起来像:
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调用中收到的字节对象转换为字符串?
答案 0 :(得分:6)
检查以确保您的响应正文未被gzip压缩。相信它的传输编码或响应标题,我对你处理压缩数据而不是字符集编码问题充满信心。
更新:意识到我养成了不解释/提供足够细节的坏习惯。对于Python gzip字节字符串,它们始终以1f8b开头。有人在这里更好地解释https://stackoverflow.com/a/3703300/9908