Кодування

Gzip/Deflate ↔ Base64

Стиснення тексту в Gzip або Deflate з подальшим Base64-кодуванням результату — і назад. Працює через Compression Streams API прямо в браузері.

Base64 сам по собі не стискає дані — навпаки, збільшує розмір приблизно на 33%. Щоб передавати великий текст у текстовому каналі компактно, його спершу стискають Gzip чи Deflate, а вже результат кодують у Base64.

Як користуватися

Типові сценарії

Що варто памʼятати

Виграш від стиснення помітний лише на достатньо великих і стисливих текстах — на коротких рядках накладні витрати Gzip-заголовка й розширення Base64 можуть навіть збільшити підсумковий розмір.

Deflate — це стиснення без заголовків Gzip, тому результат компактніший, але формат менш самодостатній: приймаюча сторона повинна точно знати, що це саме Deflate.

Стаття про цей інструмент: Gzip + Base64: стиснення даних для передачі текстом

Часті запитання

Чим Gzip відрізняється від Deflate?

Deflate — це сирий алгоритм стиснення без додаткової обгортки. Gzip додає до нього заголовок і контрольну суму CRC-32 наприкінці, що дозволяє перевірити цілісність даних і зберегти метадані. Тому дані, стиснені в Gzip, не декодуються як Deflate, і навпаки.

Навіщо тут ще й Base64?

Результат стиснення Gzip/Deflate — бінарні дані, які незручно передавати в текстових форматах (JSON, URL, конфіги). Base64-кодування перетворює їх у безпечний для копіювання текстовий рядок ціною збільшення розміру приблизно на третину.

Чому інструмент може не працювати в моєму браузері?

Стиснення виконується через Compression Streams API (CompressionStream/DecompressionStream), який підтримують не всі браузери та їхні старі версії. Якщо API недоступне, кодування та декодування працювати не будуть.

Чому розпакування іноді дає помилку «invalid header»?

Найчастіша причина — переплутаний формат: дані стиснено як «сирий» Deflate без заголовка, а розпаковуються як Gzip (який очікує власний заголовок і CRC-32), або навпаки. Спробуйте перемкнути формат у налаштуваннях інструмента.

Чи завжди стиснення зменшує підсумковий розмір?

Ні. На дуже коротких рядках накладні витрати заголовків Gzip і збільшення від Base64 можуть переважити виграш від стиснення — підхід має сенс лише для достатньо великих і стисливих текстових даних.

Статті: Кодування

Base64: навіщо потрібне кодування і як воно працює

Як Base64 перетворює бінарні дані на текст ASCII і де це реально потрібно.

Base32: чим відрізняється від Base64 і коли зручніший

Регістронезалежний алфавіт Base32 і сценарії, де він зручніший за Base64.

URL Encode/Decode: percent-encoding у посиланнях

Як спецсимволи в адресних рядках і query-параметрах перетворюються на %XX-послідовності.

HTML Entities: як безпечно виводити спецсимволи на сторінці

Чому символи < > & потрібно екранувати і як це запобігає поламаній розмітці.

JWT: структура токена та що означає "декодувати" JWT

Header, payload і signature JWT-токена та чому декодування — це не те саме, що перевірка підпису.

Unicode Escape: що означають послідовності \uXXXX

Звідки в JSON і JS-рядках беруться послідовності виду \u0041 і що вони означають.

ROT13 і шифр Цезаря: проста заміна символів

Чому зсув на 13 літер робить ROT13 симетричним і навіщо його взагалі використовують сьогодні.

Punycode: як домени з кирилицею працюють у DNS

Як домен на кшталт «приклад.укр» перетворюється на ASCII-запис із префіксом xn--.

Азбука Морзе: як текст перетворюється на крапки й тире

Принцип кодування літер крапками й тире та де азбука Морзе застосовується зараз.

Data URI: коли вбудовувати зображення прямо в код

Як data:-URI вбудовує вміст файлу прямо в HTML чи CSS і коли це виправдано.

XML Entities: екранування символів у XML-документах

П’ять обов’язкових XML-entity, без яких документ ламається при парсингу.