在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ Python 3.X 中 zlib.compress() 方法返回的是什么?

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

想對(duì)一串十六進(jìn)制的字符串(如“00FF00”)進(jìn)行 zlib 壓縮,并返回同樣十六進(jìn)制的字符串:

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

結(jié)果返回 b'x\x9c30ps30\x00\x00\x04\x90\x01M'這樣的 Bytes 類型對(duì)象,里面包含 psM 這樣的字符,無(wú)法對(duì)其進(jìn)行解碼 decode('UTF-8') ,只會(huì)報(bào)錯(cuò):

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

查詢 Python Zlib 官方文檔 也沒(méi)能找到原因,只知道 zlib.compress() 方法要求必須輸入 Bytes 類型的數(shù)據(jù),結(jié)果返回一個(gè) Bytes 類型的對(duì)象。
如何將方法 zlib.compress() 返回的值轉(zhuǎn)換成十六進(jìn)制的字符串?求大神解答。

回答
編輯回答
青瓷

因?yàn)?code>zlib.compress()返回的是壓縮后的字節(jié)

你不能對(duì)壓縮后的字節(jié)進(jìn)行decode

想要得到00FF00字符串,你需要先調(diào)用zlib.decompress()把壓縮后的字節(jié)解壓回原來(lái)的字節(jié),再對(duì)原來(lái)的字節(jié)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)
2017年6月5日 11:01
編輯回答
旖襯

結(jié)果還是bytes呀。你想以16進(jìn)制字符串形式查看壓縮后的結(jié)果的話

res = zlib.compress(test)

string = ['%02x' % b for b in res]
print(''.join(string))
2017年7月26日 23:11
編輯回答
不歸路

解碼前先使用zlib.decompress解壓

2017年6月27日 06:34