ver online mac descomprimir archivos archivo abrir gzip zlib inflate

online - ¿Cómo puedo descomprimir una corriente gzip con zlib?



descomprimir tar.gz online (4)

Los archivos de formato Gzip (creados con el programa gzip , por ejemplo) usan el algoritmo de compresión "desinflar", que es el mismo algoritmo de compresión que usa zlib . Sin embargo, cuando se usa zlib para inflar un archivo comprimido gzip, la biblioteca devuelve un Z_DATA_ERROR .

¿Cómo puedo usar zlib para descomprimir un archivo gzip?


pitón

zlib biblioteca zlib admite :

El módulo python zlib también los soportará.

elegir windowBits

Pero zlib puede descomprimir todos esos formatos:

  • para (de-) comprimir el formato deflate , use wbits = -zlib.MAX_WBITS
  • para (des) comprimir el formato zlib , use wbits = zlib.MAX_WBITS
  • para (des) comprimir formato gzip , use wbits = zlib.MAX_WBITS | 16 wbits = zlib.MAX_WBITS | 16

Consulte la documentación en http://www.zlib.net/manual.html#Advanced (sección inflateInit2 )

ejemplos

datos de prueba:

>>> deflate_compress = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS) >>> zlib_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS) >>> gzip_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS | 16) >>> >>> text = ''''''test'''''' >>> deflate_data = deflate_compress.compress(text) + deflate_compress.flush() >>> zlib_data = zlib_compress.compress(text) + zlib_compress.flush() >>> gzip_data = gzip_compress.compress(text) + gzip_compress.flush() >>>

prueba obvia para zlib :

>>> zlib.decompress(zlib_data) ''test''

prueba para deflate :

>>> zlib.decompress(deflate_data) Traceback (most recent call last): File "<stdin>", line 1, in <module> zlib.error: Error -3 while decompressing data: incorrect header check >>> zlib.decompress(deflate_data, -zlib.MAX_WBITS) ''test''

prueba para gzip :

>>> zlib.decompress(gzip_data) Traceback (most recent call last): File "<stdin>", line 1, in <module> zlib.error: Error -3 while decompressing data: incorrect header check >>> zlib.decompress(gzip_data, zlib.MAX_WBITS|16) ''test''

los datos también son compatibles con el módulo gzip :

>>> import gzip >>> import StringIO >>> fio = StringIO.StringIO(gzip_data) >>> f = gzip.GzipFile(fileobj=fio) >>> f.read() ''test'' >>> f.close()

detección automática de encabezado (zlib o gzip)

windowBits 32 a windowBits activará la detección de encabezado

>>> zlib.decompress(gzip_data, zlib.MAX_WBITS|32) ''test'' >>> zlib.decompress(zlib_data, zlib.MAX_WBITS|32) ''test''

usando gzip lugar

Para los datos gzip con encabezado gzip, puede usar el módulo gzip directamente; pero recuerda que debajo del capó , gzip usa zlib .

fh = gzip.open(''abc.gz'', ''rb'') cdata = fh.read() fh.close()


La estructura de zlib y gzip es diferente. zlib usa RFC 1950 y gzip utiliza RFC 1952 , por lo que tiene diferentes encabezados, pero el resto tiene la misma estructura y sigue el RFC 1951 .


Para descomprimir un archivo de formato gzip con zlib, llame a inflateInit2 con el parámetro windowBits como 16+MAX_WBITS , así:

inflateInit2(&stream, 16+MAX_WBITS);

Si no lo hace, zlib se quejará de un formato de flujo incorrecto. De forma predeterminada, zlib crea secuencias con un encabezado zlib, y en inflar no reconoce los diferentes encabezados gzip a menos que así lo indique. Aunque esto se documenta a partir de la versión 1.2.1 del archivo de encabezado zlib.h , no está en el manual de zlib . Desde el archivo de encabezado:

windowBits también puede ser mayor que 15 para la decodificación gzip opcional. Agregue 32 a windowBits para habilitar la decodificación zlib y gzip con detección automática de encabezado, o agregue 16 para decodificar solo el formato gzip (el formato zlib devolverá un Z_DATA_ERROR ). Si se está descodificando una corriente gzip, strm->adler es un crc32 en lugar de un adler32.


Node.js

const { gunzip } = require(''zlib''); const decompressGzip = compressedData => new Promise((resolve, reject) => { gunzip(compressedData, (error, decompressedData) => { if (error) return reject(error); return resolve(decompressedData); }); }); module.exports = { decompressGzip };

Instalas zlib usando hilo

yarn add zlib