Reading online zip files - zipfile and zlib, wbits

Brendan brendandetracey at yahoo.com
Fri Dec 12 09:46:38 EST 2008


On Dec 12, 10:25 am, Brendan <brendandetra... at yahoo.com> wrote:
> I am fooling around with accessing contents of zip files online. I
> download the tail end of the zip and use zipfile to get the zip
> central directory structure. I download the section of the zip file I
> need, directly read the zip file headers and use that information with
> zlib to uncompress the data. The files I am examining will always be
> compressed using deflate, with a wbits value of -15(minus for
> headerless data because I am unsure whether the zip file header is
> what zlib expects).
>
> I can not find anywhere in the PK Zip Application notes (http://www.pkware.com/documents/casestudies/APPNOTE.TXT) how to
> determine the value I should uze for wbits with zlib.decompress. I
> have determined it is -15 from experimentation. Does anyone know the
> answer to this?

Okay, I found part of the answer here in the zip app notes
[quote]
general purpose bit flag: (2 bytes)

          Bit 0: If set, indicates that the file is encrypted.

          (For Method 6 - Imploding)
          Bit 1: If the compression method used was type 6,
                 Imploding, then this bit, if set, indicates
                 an 8K sliding dictionary was used.  If clear,
                 then a 4K sliding dictionary was used.
          Bit 2: If the compression method used was type 6,
                 Imploding, then this bit, if set, indicates
                 3 Shannon-Fano trees were used to encode the
                 sliding dictionary output.  If clear, then 2
                 Shannon-Fano trees were used.

          (For Methods 8 and 9 - Deflating)
          Bit 2  Bit 1
            0      0    Normal (-en) compression option was used.
            0      1    Maximum (-exx/-ex) compression option was
used.
            1      0    Fast (-ef) compression option was used.
            1      1    Super Fast (-es) compression option was used.
[/quote]

Now I just don't understand Why Normal deflate corresponds to 15
wbits, and why I have to use headerless for the data, i.e. wbits = -15.



More information about the Python-list mailing list