A zlib question

John Machin sjmachin at lexicon.net
Sat Jul 11 23:01:35 EDT 2009


Roland Hedberg <roland <at> catalogix.se> writes:

> I have a problem with zlib and compressing/decompressing according to  
> RFC 1951.
> 
> It seems like I can decompress, something compressed according to RFC  
> 1951 by someone else, provided I set wbits to something negative (used  
> -8 but I guess any negative number would work?).

-15 will get you a 32KB window which is the best
and is the default in APIs
where a default is possible.

original_data = zlib.decompress(deflated_data, -15)

 
> But how can I compress using zlib so it doesn't add a gzip header ?

You don't need to, because zlib doesn't add a gzip header
(RFC 1952) -- it adds a zlib header (RFC 1950)
... without out any frills (i.e. default case) a zlib
stream is a 2-byte header plus the RFC 1951 deflate stream
plus a 4-byte checksum.

deflated_data = zlib.compress(uncompressed_data)[2:-4]

Coincidentally this question arose elsewhere very recently: see

http://stackoverflow.com/questions/1089662/
python-inflate-and-deflate-implementations

concatenate the above two lines -- gmane <= 80-byte line limit 8-P

BTW FWIW, one can evidently force zlib to do a gzip wrapper
instead of a zlib wrapper by setting wbits to positive > 15
[brilliant API design], but one might 
be better off using the gzip module directly ...

HTH,
John





More information about the Python-list mailing list