Мне нужно распаковать данные gzip
или deflate
в кодировке Base64 из JavaScript, не добавляя много к размеру пакета (поэтому я не могу просто использовать pako
). Я нашел хорошую маленькую библиотеку для распаковки deflate
данных, которая называется UZIP
.
Похоже, что gzip
это просто deflate
с 10-байтовым заголовком и 8 байт нижний колонтитул Гарантируется, что данные не будут повреждены и не будут иметь никаких дополнительных заголовков, кроме этих десяти байтов. Имея все это в виду, я предположил, что мог бы просто Base64 декодировать данные, преобразовать их в Uint8Array
и вырезать верхний и нижний колонтитулы.
const data = // some Base64-encoded, gzipped string
const dataBytes = new Uint8Array(atob(data).split('').map(char => char.charCodeAt(0)));
const decompressed = UZIP.inflate(dataBytes.slice(10, -8));
Этот код зависает бесконечно (предположительно потому, что UZIP
имеет плохую обработку ошибок). Я пытался использовать pako
и zlib
на обоих Node.js и в браузере, но оба жаловались на неверный заголовок. Для справки: используя zlib.gunzip
после декодирования из Base64, а также запуская pako.inflate
(который автоматически определяет тип сжатия), оба правильно распаковывают сжатые данные.
Можно ли извлечь необработанные deflate
данные из строки gzip? Если нет, то существуют ли легкие библиотеки, которые могут распаковывать gzip
и deflate
?