Python 3.X 中 zlib.compress() 方法返回的是什么?

想对一串十六进制的字符串(如“00FF00”)进行 zlib 压缩,并返回同样十六进制的字符串:

test = b'00FF00'
print(zlib.compress(test))

结果返回 b'x\x9c30ps30\x00\x00\x04\x90\x01M'这样的 Bytes 类型对象,里面包含 psM 这样的字符,无法对其进行解码 decode('UTF-8') ,只会报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9c in position 1: invalid start byte

查询 Python Zlib 官方文档 也没能找到原因,只知道 zlib.compress() 方法要求必须输入 Bytes 类型的数据,结果返回一个 Bytes 类型的对象。
如何将方法 zlib.compress() 返回的值转换成十六进制的字符串?求大神解答。

阅读 8.6k
3 个回答

结果还是bytes呀。你想以16进制字符串形式查看压缩后的结果的话

res = zlib.compress(test)

string = ['%02x' % b for b in res]
print(''.join(string))

解码前先使用zlib.decompress解压

因为zlib.compress()返回的是压缩后的字节

你不能对压缩后的字节进行decode

想要得到00FF00字符串,你需要先调用zlib.decompress()把压缩后的字节解压回原来的字节,再对原来的字节decode

import zlib
origin_data = b'00FF00'
compress_data = zlib.compress(origin_data)
decompress_data = zlib.decompress(compress_data)
assert origin_data == decompress_data
decode_str = decompress_data.decode('utf-8')
print(decode_str)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题