Search code examples
pythonpython-3.xgzipzlib

Decode gzip compressed and base64 encoded data to a readable format


Trying to decode gzip compressed and base64 encoded data to a readable format in 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)

Been getting: "Error -2 while preparing to decompress data: inconsistent stream state." Not sure what I'm doing wrong.


Solution

  • zlib successfully decompresses data that it has compressed previously:

    >>> 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 fails to decompress (with the default settings) gzip data:

    >>> 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'