繁体   English   中英

将gzip压缩和base64编码数据解码为可读格式

[英]Decode gzip compressed and base64 encoded data to a readable format

尝试将gzip压缩和base64编码数据解码为Python3.4中的可读格式。

import base64
import zlib

original_data = '...jU2X0NCQ19TSEEAAAABAAA='     #Data cut short.

decoded64 = base64.b64decode(original_data)      #format:b'\x16xe\x94...\xae\x9a\...'
final_decoded = zlib.decompress(decoded64)
print(final_decoded)

得到:“准备解压缩数据时的错误-2:不一致的流状态。” 不知道我做错了什么。

zlib成功解压缩先前已压缩的数据:

>>> data = b'data'
>>> import zlib
>>> compressed = zlib.compress(data)
>>> import base64
>>> original_data = base64.b64encode(compressed).decode()
>>> zlib.decompress(base64.b64decode(original_data))
b'data'

zlib无法解压缩(使用默认设置) gzip数据:

>>> import gzip
>>> gzipped_data = base64.b64encode(gzip.compress(data)).decode()
>>> gzipped_data != original_data
True
>>> print(zlib.decompress(base64.b64decode(gzipped_data)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
zlib.error: Error -3 while decompressing data: incorrect header check
>>> gzip.decompress(base64.b64decode(gzipped_data))
b'data'

我有同样的问题并以这种方式解决:

from zipfile import ZipFile
from tempfile import SpooledTemporaryFile
import base64
decoded_base64 = base64.b64decode(base64_zip)
with SpooledTemporaryFile() as tmp:
    tmp.write(decoded_base64)
    archive = ZipFile(tmp, 'r')
    for file in archive.filelist:
        content = archive.read(file.filename)
        print("The file %s have the content %s" % (file.filename, content))

使用这个代码不会写文件,我测试过。 非常有用,因为您可以轻松地读取zip文件中的文件,例如以前通过休息接收的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM