So komprimieren Sie mit zlib und kodieren als Base64
- Tippen oder fügen Sie den Text ein, oder legen Sie eine Datei ab.
- Format steht anfangs auf zlib (deflate). Wechseln Sie zu Raw Deflate, wenn der Empfänger den nackten Stream will, oder zu gzip.
- Aktivieren Sie bei Bedarf URL-sicher (- _) oder Umbruch bei 76.
- Ausgabe kopieren, oder laden Sie die Base64-
.txtoder die binäre.zz- bzw..deflate-Datei herunter.
Tauschen schickt die Ausgabe an die Seite Entpacken, um den Hin- und Rückweg zu bestätigen.
Derselbe Text in drei Hüllen
Hello, world! (13 Bytes), komprimiert mit der Standardstufe:
| Format | Bytes | Base64 |
|---|---|---|
| Raw Deflate | 15 | 80jNycnXUSjPL8pJUQQA |
| zlib | 21 | eJzzSM3JyddRKM8vyklRBAAgXgSK |
| gzip | 33 | H4sIAAAAAAAAA/NIzcnJ11Eozy/KSVEEAObG5usNAAAA |
Der Deflate-Stream besteht in allen dreien aus denselben 15 Bytes, und doch sieht das Base64 unterschiedlich aus, weil die Header mit 2 und 10 Bytes verschieben, wo jedes Byte in den 3-Byte-Gruppen landet. Der zlib-Header ist bei der Standardstufe 78 9C, deshalb beginnt zlib-Base64 mit eJ. Bei Stufe 9 ist er 78 DA, in Base64 eN.
Welcher Aufruf welches Format erzeugt
Die meisten „Deflate“-Fehler entstehen, weil beide Seiten dasselbe Wort für unterschiedliche Hüllen verwenden:
| Sprache | zlib (RFC 1950) | Raw Deflate (RFC 1951) | gzip |
|---|---|---|---|
| Python | zlib.compress() | zlib.compressobj(wbits=-15) | gzip.compress() |
| Node.js | zlib.deflateSync() | zlib.deflateRawSync() | zlib.gzipSync() |
| Browser | CompressionStream("deflate") | CompressionStream("deflate-raw") | CompressionStream("gzip") |
| PHP | gzcompress() | gzdeflate() | gzencode() |
| Java | new Deflater() | new Deflater(level, true) | GZIPOutputStream |
| .NET | ZLibStream (.NET 6+) | DeflateStream | GZipStream |
| Go | compress/zlib | compress/flate | compress/gzip |
Achten Sie auf die Fallen: DeflateStream in .NET und compress/flate in Go sind Raw Deflate, während „deflate“ in Node und im Browser zlib ist. Ein C#-Dienst und ein Node-Client, die beide „Deflate verwenden“, verstehen sich nicht, solange nicht eine Seite etwas ändert.
Wo welche Hülle vorkommt
- zlib:
FlateDecode-Streams in PDFs, PNG-Bilddaten, Git-Objekte, viele Binärprotokolle und Spielstand-Formate. - Raw Deflate: das SAML-HTTP-Redirect-Binding (der SAML-Decoder beherrscht es), Einträge in ZIP-Dateien, WebSocket-
permessage-deflate. - gzip: Dateien, HTTP, Logs. Die gzip-Seite behandelt es.
Zlib + Base64 im Code
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'
Um solche Strings zurückzulesen, nutzen Sie den Base64-Decoder für gzip und zlib, der alle drei Hüllen erkennt. Mehr unter Python und Node.js.
Häufige Probleme
incorrect header check: zlib-Decoder, aber Raw- oder gzip-Daten. Passen Sie die Hülle an.invalid stored block lengthsoderinvalid block type: Ein Raw-Deflate-Decoder bekam zlib-Daten; die beiden Header-Bytes werden als Deflate-Blöcke gelesen.- Das Ergebnis ist länger als die Eingabe: Kurze Strings lassen sich nicht komprimieren. Unter etwa 50–100 Bytes ist reines Base64 kürzer.
- Die Ausgabe stimmt nicht Byte für Byte mit einem anderen Tool überein: Kompressionsstufe und Bibliothek verändern beide die Bytes, und jeder korrekte Dekompressor liefert aus beiden Varianten dasselbe Original.
Häufige Fragen
Was ist der Unterschied zwischen zlib und Deflate?
Deflate ist der Kompressionsalgorithmus. Raw Deflate ist der nackte komprimierte Stream; zlib legt einen 2-Byte-Header und eine 4-Byte-Adler-32-Prüfsumme darum; gzip ergänzt einen 10-Byte-Header und einen 8-Byte-Trailer mit CRC-32. Die komprimierten Daten in der Mitte sind identisch.
Was verursacht „incorrect header check“?
Der Dekompressor erwartete einen zlib-Header und bekam etwas anderes, meist Raw Deflate oder gzip. Verwenden Sie den passenden Aufruf (zlib.decompress(data, -15) in Python für Raw Deflate) oder kodieren Sie neu im Format, das der Empfänger erwartet.
Ist HTTP Content-Encoding: deflate Raw Deflate oder zlib?
Die HTTP-Spezifikation sagt zlib. Manche alten Server sendeten unter diesem Namen Raw Deflate, deshalb ist gzip für HTTP die sicherere Wahl.