Kodowanie

Gzip/Deflate ↔ Base64

Kompresja tekstu do Gzip lub Deflate z kodowaniem Base64 wyniku — i odwrotnie. Działa przez Compression Streams API bezpośrednio w przeglądarce.

Base64 by itself doesn't compress anything — quite the opposite, it grows the size by about 33%. To send large text compactly through a text-only channel, it's first compressed with Gzip or Deflate, and only then is the result Base64-encoded.

How to use it

Common uses

Things to keep in mind

Compression only pays off on sufficiently large, compressible text — on short strings the Gzip header overhead plus the Base64 expansion can actually make the result bigger.

Deflate skips Gzip's headers, so its output is more compact, but the format is less self-describing: the receiving side needs to know in advance that it's Deflate specifically.

Artykuł o tym narzędziu: Gzip + Base64: kompresja danych do przesyłania jako tekst

Najczęstsze pytania

Czym różni się Gzip od Deflate?

Deflate to sam algorytm kompresji bez dodatkowej otoczki, natomiast Gzip to format opakowujący dane skompresowane Deflate w nagłówek z metadanymi oraz sumę kontrolną CRC-32 na końcu. Dlatego dane w formacie Gzip nie są binarnie identyczne z surowym Deflate, mimo tego samego algorytmu wewnątrz.

Dlaczego trzeba wybrać poprawny format przy dekompresji?

Bez nagłówka Gzip dekompresor nie odróżni automatycznie, czy dane to Gzip czy surowy Deflate. Wybranie złego formatu skończy się błędem lub bezsensownym wynikiem, dlatego format trzeba znać albo zgadnąć na podstawie źródła danych.

Czy to narzędzie działa w każdej przeglądarce?

Kompresja i dekompresja korzystają z natywnego Compression Streams API przeglądarki. Jeśli Twoja przeglądarka go nie obsługuje, narzędzie nie zadziała — dane i tak nigdy nie są wysyłane na żaden serwer, cała praca odbywa się lokalnie.

Dlaczego rozpakowanie czasem daje błąd „invalid header"?

Najczęstsza przyczyna to pomylony format: dane skompresowano jako „surowy" Deflate bez nagłówka, a rozpakowuje się jako Gzip (który oczekuje własnego nagłówka i CRC-32), albo odwrotnie. Spróbuj przełączyć format w ustawieniach narzędzia.

Czy kompresja zawsze zmniejsza końcowy rozmiar?

Nie. Przy bardzo krótkich ciągach narzut nagłówków Gzip i zwiększenie wynikające z Base64 mogą przewyższyć zysk z kompresji — takie podejście ma sens tylko dla wystarczająco dużych i dobrze kompresujących się danych tekstowych.

Artykuły: Kodowanie

Base64: po co jest kodowanie i jak działa

Jak Base64 zamienia dane binarne na tekst ASCII i kiedy naprawdę jest to potrzebne.

Base32: czym różni się od Base64 i kiedy jest wygodniejszy

Alfabet Base32 niewrażliwy na wielkość liter i sytuacje, w których jest wygodniejszy od Base64.

URL Encode/Decode: percent-encoding w linkach

Jak znaki specjalne w adresach i parametrach zamieniają się w sekwencje %XX.

HTML Entities: jak bezpiecznie wyświetlać znaki specjalne

Dlaczego znaki < > & trzeba escapować i jak to zapobiega uszkodzeniu znaczników.

JWT: budowa tokenu i co znaczy „dekodowanie" JWT

Header, payload i signature tokenu JWT oraz dlaczego dekodowanie to nie to samo co weryfikacja podpisu.

Unicode Escape: co oznaczają sekwencje \uXXXX

Skąd biorą się sekwencje takie jak \u0041 w JSON i ciągach JS oraz co oznaczają.

ROT13 i szyfr Cezara: proste podstawianie znaków

Dlaczego przesunięcie o 13 liter sprawia, że ROT13 jest samoodwrotny, i po co się go dziś używa.

Punycode: jak umiędzynarodowione domeny działają w DNS

Jak domena z niełacińskimi znakami zamienia się w formę ASCII z prefiksem xn--.

Alfabet Morse'a: jak tekst zamienia się w kropki i kreski

Zasada kodowania liter jako kropek i kresek oraz gdzie alfabet Morse'a jest dziś stosowany.

Data URI: kiedy osadzać obrazy bezpośrednio w kodzie

Jak Data URI osadza zawartość pliku bezpośrednio w HTML lub CSS i kiedy się to opłaca.

XML Entities: escapowanie znaków w dokumentach XML

Pięć obowiązkowych encji XML, bez których dokument psuje się podczas parsowania.