Сжатие и распаковка gzip / deflate / zlib
КодированиеСжимайте или распаковывайте текст с помощью gzip, deflate или zlib. Вывод в Base64 или Hex со сравнением размера до/после.
Удалённые URL не запрашиваются; вставьте JSON напрямую.
На этой странице
Что такое gzip-сжатие?#
gzip — универсальный компрессор без потерь для текста и байтов, используемый по всему вебу: он лежит за HTTP-заголовком Content-Encoding: gzip, файлами .gz, которые вы качаете с серверов, и проводным форматом бесчисленных логгеров. Он работает, находя повторяющиеся байтовые шаблоны и заменяя их короткими ссылками, поэтому текст с повторениями (исходный код, JSON, CSV, строки логов) сжимается разительно, а уже сжатые или случайные данные (JPEG, зашифрованные байты) почти не меняются.
Эта страница предлагает три родственных алгоритма, которых в обиходе сваливают под словом «gzip», — отличаются они лишь обёрткой вокруг общего ядра DEFLATE:
- gzip (RFC 1952) — полный пакет: заголовок с магическим байтом, сжатый payload и трейлер с CRC32 и размером. Это то, что используют файлы
.gzи HTTP gzip. - deflate (RFC 1951) — «сырой» сжатый поток без обёртки. Наименьший вывод, но без проверки целостности; некоторые API (старый
Content-Encoding: deflate) ждут именно его. - zlib (RFC 1950) — лёгкий 2-байтовый заголовок плюс контрольная сумма Adler-32; нечто среднее между двумя другими.
Поскольку сжатый вывод бинарный, инструмент рендерит его как текст Base64 или Hex, чтобы можно было скопировать, вставить в JSON или передать дальше. Распаковка делает обратное: читает Base64 или Hex и возвращает исходный UTF-8-текст.
Как пользоваться#
- Выберите алгоритм на панели инструментов: gzip, deflate или zlib.
- Выберите направление: Сжать (текст на входе → Base64/Hex на выходе) или Распаковать (Base64/Hex на входе → текст на выходе).
- Выберите кодирование вывода: Base64 или Hex (в режиме распаковки селектор заблокирован, поскольку инструмент определяет кодирование автоматически).
- Вставьте данные в панель Ввод слева; размер ввода показан в её заголовке. Результат заполняет панель Вывод, тоже с размером в заголовке.
- После сжатия появляется полоса «до/после», показывающая, насколько payload вырос или уменьшился. Нажмите Копировать, чтобы забрать результат, или Скачать, чтобы сохранить его как файл
.gz. Пример загружает типичную строку лога; Очистить всё сбрасывает.
Ключевые возможности#
- Три алгоритма, одно управление. Переключайтесь между gzip, deflate и zlib, чтобы точно увидеть, как накладные расходы обёртки меняют размер вывода для одного ввода.
- Честное сравнение размеров. Полоса «до/после» показывает реальные числа байт и процент изменения со знаком — включая случай, когда сжатие делает payload больше, что и есть самое полезное, что нужно знать о gzip.
- Автоопределение кодирования при распаковке. Вставьте Base64 или Hex, и инструмент сам разберётся, что именно, поэтому запоминать не нужно.
- Строгий UTF-8 на обратном пути. Если распакованные байты не являются корректным UTF-8 (выбран не тот алгоритм, payload усечён), инструмент сообщает об этом, а не выдаёт символы замены, скрывающие ошибку.
- Работает в вашем браузере. Сжатие идёт локально через маленькую лениво загружаемую библиотеку; ничто из введённого не покидает страницу.
Разбор примера#
Сжатие одной короткой строки лога — ввод Пример 2026-08-06 INFO request handled path=/api/stats status=200 (58 байт) — алгоритмом gzip и выводом Base64 даёт:
H4sIAHcNdmoAAzMyMDLTNbDQNTBT8PRz81coSi0sTS0uUchIzEvJSU1RKEgsybDVTyzI1C8uSSwpVgCRpcW2RgYGACs/7EA6AAAA
Полоса «до/после» открывает контринтуитивную часть: эти 58 байт простого текста превращаются в 75 байт после gzip и Base64. Ввод слишком короткий и слишком случайный, чтобы DEFLATE нашёл что сжимать, поэтому заголовок, трейлер gzip и накладные расходы Base64 (около 33 %) просто ложатся сверху. Именно поэтому сжимать крошечные payload бессмысленно.
Сравните с повторяющимся текстом. Восемь копий строки transaction_id=txn_00001 status=paid amount=100 currency=usd\n в сумме 488 байт, и gzip сжимает их до 84 байт — около 17 % от оригинала. Здесь сжатие и окупается: чем больше повторений, тем глубже сжатие.
Переключение той же короткой строки лога на deflate уменьшает вывод до 57 байт (без заголовка/трейлера), а zlib даёт 63 байта — удобно, когда вы целитесь в конкретный проводной формат и должны точно совпасть с другой стороной.
FAQ#
gzip, deflate или zlib — что выбрать?#
Сверяйтесь с другой стороной. Для файлов .gz, HTTP Content-Encoding: gzip и почти каждого «сжатого» API-payload используйте gzip. Используйте deflate только когда API явно документирует «голый» DEFLATE (некоторые legacy-серверы с Content-Encoding: deflate). Используйте zlib, когда библиотека или протокол прямо так и называет его. Если сомневаетесь, gzip — безопасный выбор по умолчанию.
Вывод больше ввода. Это баг?#
Нет — так работает сжатие без потерь на маленьком или высокоэнтропийном вводе. На поток приходится фиксированный накладной расход (заголовок, трейлер, разогрев словаря), и если в содержимом мало повторений, DEFLATE не может это окупить. Практическое правило: gzip начинает стабильно выигрывать на payload от нескольких сотен байт и больше, особенно на тексте с повторениями. Для крошечных значений пропускайте сжатие.
Распаковка пишет, что данные не являются корректным UTF-8. Что пошло не так?#
Обычно одно из трёх: выбран не тот алгоритм (данные были сжаты zlib, а выбран gzip, или наоборот), Base64/Hex усечён или содержит лишние пробелы внутри, либо оригинал был бинарным, а не текстом. Попробуйте по очереди другие алгоритмы и проверьте, что ничего не обрезало вставленный payload.
Можно ли этим сжимать изображения, видео или уже запакованные файлы?#
Вставить можно что угодно, но выигрыш будет редко. Форматы вроде JPEG, PNG, MP4 и .zip/.gz уже сжаты, поэтому DEFLATE сжать там нечего — вывод будет примерно того же размера или чуть больше. gzip — инструмент для текста и структурированных данных, а не для второго прохода по бинарным медиа.