将Python的字节类型转换为字符串

5

我正在使用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调用中接收到的字节对象转换为字符串?

1个回答

6

请检查响应体是否未经gzip压缩。相信响应头的传输编码等信息,我非常有信心你正在处理被压缩的数据而不是字符集编码问题。

更新: 发现我有一个坏习惯,就是不够解释/提供足够的细节。对于Python gzip'd字节串,它们总是以1f8b开头,这里有人解释得更好 https://dev59.com/N3A65IYBdhLWcg3wqAat#3703300


1
我用以下代码解决了这个问题: import zlib decompressed_data=zlib.decompress(f.read(), 16+zlib.MAX_WBITS) - amccormack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接