Загрузить файл
  1. base64hub
  2. Веб и токены
  3. zlib + Base64

Сжатие zlib и deflate в Base64

Сожмите текст или файл через zlib (RFC 1950) или raw deflate (RFC 1951) и скопируйте Base64. Если выбрать обёртку, которую ждёт принимающий код, ошибка «incorrect header check» исчезнет.

Бесплатно без регистрации и ограничений Локально ничего не загружается 3 обёртки zlib, raw deflate и gzip из одного ввода Обновлено 27 окт. 2026 г.
Ввод –Сжато –Результат –Степень сжатия –

Обработка идёт в браузере. Эта страница не может никуда отправить ваши данные – откуда мы это знаем

Как сжать zlib и закодировать в Base64

  1. Введите или вставьте текст либо перетащите файл.
  2. В поле Формат по умолчанию стоит zlib (deflate). Переключите на Raw deflate, если получателю нужен голый поток, или на gzip.
  3. При желании отметьте URL-safe (- _) или Перенос по 76.
  4. Нажмите Скопировать результат или скачайте Base64 в .txt либо бинарный файл .zz / .deflate.

Поменять местами отправляет результат на сторону Распаковать, чтобы проверить обратное преобразование.

Один текст в трёх обёртках

Hello, world! (13 байт), сжатый с уровнем по умолчанию:

ФорматБайтBase64
raw deflate1580jNycnXUSjPL8pJUQQA
zlib21eJzzSM3JyddRKM8vyklRBAAgXgSK
gzip33H4sIAAAAAAAAA/NIzcnJ11Eozy/KSVEEAObG5usNAAAA

Во всех трёх лежит один и тот же поток deflate в 15 байт. Base64 всё равно выглядит по-разному: заголовки в 2 и 10 байт сдвигают положение каждого байта в группах по 3. На уровне по умолчанию заголовок zlib равен 78 9C, поэтому Base64 от zlib начинается с eJ. На уровне 9 заголовок 78 DA даёт в Base64 eN.

Какой вызов даёт какой формат

Большинство ошибок с «deflate» возникает, когда две стороны называют одним словом разные обёртки:

Языкzlib (RFC 1950)raw deflate (RFC 1951)gzip
Pythonzlib.compress()zlib.compressobj(wbits=-15)gzip.compress()
Node.jszlib.deflateSync()zlib.deflateRawSync()zlib.gzipSync()
БраузерCompressionStream("deflate")CompressionStream("deflate-raw")CompressionStream("gzip")
PHPgzcompress()gzdeflate()gzencode()
Javanew Deflater()new Deflater(level, true)GZIPOutputStream
.NETZLibStream (.NET 6+)DeflateStreamGZipStream
Gocompress/zlibcompress/flatecompress/gzip

Ловушки здесь такие: DeflateStream в .NET и compress/flate в Go выдают raw, а «deflate» в Node и в браузере означает zlib. Сервис на C# и клиент на Node, которые оба «используют deflate», не поймут друг друга, пока одну из сторон не поправят.

Где встречается каждая обёртка

  • zlib: потоки FlateDecode в PDF, данные изображения в PNG, объекты Git, многие бинарные протоколы и форматы сохранений игр.
  • raw deflate: привязка SAML HTTP-Redirect (с ней справляется декодер SAML), записи внутри ZIP-файлов, WebSocket permessage-deflate.
  • gzip: файлы, HTTP, логи. Про него есть отдельная страница gzip.

Zlib + Base64 в коде

import base64, zlib

packed = base64.b64encode(zlib.compress(b"Hello, world!")).decode()
# 'eJzzSM3JyddRKM8vyklRBAAgXgSK'
text = zlib.decompress(base64.b64decode(packed))
// Node.js: raw deflate for a SAML-style payload
const zlib = require("zlib");
const packed = zlib.deflateRawSync(Buffer.from("Hello, world!")).toString("base64");
// '80jNycnXUSjPL8pJUQQA'

Чтобы прочитать такие строки обратно, используйте декодер Base64 для gzip и zlib, который определяет все три обёртки. Подробнее в статьях про Python и Node.js.

Частые проблемы

  • incorrect header check: декодер zlib получил raw deflate или gzip. Подберите нужную обёртку.
  • invalid stored block lengths или invalid block type: декодеру raw deflate дали данные zlib, и два байта заголовка читаются как блоки deflate.
  • Результат длиннее исходника: короткие строки не сжимаются. Примерно до 50–100 байт обычный Base64 короче.
  • Байты отличаются от результата другого инструмента: уровень сжатия и реализация меняют вывод. Любой корректный распаковщик всё равно вернёт исходные данные.

Вопросы и ответы

Чем zlib отличается от deflate?

Deflate называют сам алгоритм сжатия, а raw deflate означает голый сжатый поток. Zlib добавляет вокруг него 2-байтовый заголовок и 4-байтовую контрольную сумму Adler-32, gzip добавляет 10-байтовый заголовок и 8-байтовый хвост с CRC-32. Сжатые данные в середине одинаковы.

Откуда берётся ошибка «incorrect header check»?

Распаковщик ждал заголовок zlib, а получил что-то другое, чаще всего raw deflate или gzip. Используйте подходящий вызов (zlib.decompress(data, -15) в Python для raw deflate) или перекодируйте в формат, который ждёт получатель.

Content-Encoding: deflate в HTTP означает raw deflate или zlib?

По спецификации HTTP это zlib. Некоторые старые серверы отправляли под этим именем raw deflate, поэтому для HTTP надёжнее gzip.