Wie entschlüssle ich in Python die GZIP-Kodierung?
Heruntergeladen ich eine Seite in meinem python-Skript.
In den meisten Fällen funktioniert dies gut.
Jedoch, hatte dieser einen Antwort-header: GZIP-Codierung, und als ich versuchte, drucken Sie den Quellcode der web-Seite, er hatte alle Symbole in meiner putty.
Wie decodieren dies normaler text?
InformationsquelleAutor der Frage TIMEX | 2010-04-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verwende zlib zu Dekomprimieren Gzip-Inhalte aus dem web.
InformationsquelleAutor der Antwort YOU
Dekomprimieren Sie Ihre byte-stream über die eingebaute gzip-Modul.
Wenn Sie irgendwelche Probleme haben, zeigen die genauen minimal-code, der Sie verwendet, die genaue Fehlermeldung und traceback, zusammen mit dem Ergebnis der
print repr(your_byte_stream[:100])
Weitere Informationen
1. Für eine Erklärung des gzip/zlib/deflate Verwirrung, Lesen Sie die "Andere Anwendungen" Abschnitt dieser Wikipedia-Artikel.
2. Es kann einfacher sein, verwenden Sie das zlib-Modul als das gzip-Modul, wenn Sie eine Zeichenfolge anstelle einer Datei. Leider ist die Python docs sind unvollständig/falsch:
"""
zlib.decompress(string[, wbits[, bufsize]])
...
Der absolute Wert von wbits ist die Basis-zwei-Logarithmus der Größe der history-Puffer ("Fenstergröße") verwendet, wenn die Komprimierung der Daten. Der absolute Wert sollte zwischen 8 und 15 für die neuesten Versionen der zlib-Bibliothek, größere Werte, was eine bessere Kompression auf Kosten der größeren Speichernutzung. Der Standardwert ist 15. Wenn wbits negativ ist, wird der standard-gzip-header ist unterdrückt; dies ist eine nicht dokumentierte Funktion der zlib-Bibliothek verwendet, um die Kompatibilität mit entpacken Sie die Datei-Komprimierung-format.
"""
Erstens, 8 <= log2_window_size <= 15, mit der Bedeutung, die oben gegeben. Was soll dann eine separate arg kludged oben:
arg == log2_window_size bedeutet, dass davon ausgegangen string ist im zlib-format (RFC 1950; was die HTTP 1.1-RFC 2616 verwirrenderweise nennt, "entlüften").
arg == -log2_window_size bedeutet, dass davon ausgegangen string ist im deflate-format (RFC 1951; was Menschen, die nicht Lesen Sie die HTTP 1.1-RFC sorgfältig tatsächlich umgesetzt)
arg == 16 + log_2_window_size bedeutet, dass davon ausgegangen string ist im gzip-format (RFC 1952). Sie können also mit 31.
Den oben genannten Informationen, die dokumentiert ist in der zlib-C-Bibliothek-Handbuch ... Strg-F-Suche für
windowBits
.InformationsquelleAutor der Antwort John Machin
Ich so etwas wie, dass:
InformationsquelleAutor der Antwort Michał Niklas
für Python ist3
versuchen, diese
InformationsquelleAutor der Antwort Shatu
Ähnlich Shatu Antwort für Python ist3, aber angeordnet ein wenig anders:
Diese Methode erlaubt es, für die Verpackung der gzip.Dekomprimieren() in einen try/except zu erfassen und übergeben Sie das OSError, dass die Ergebnisse in Situationen, in denen Sie möglicherweise erhalten gemischten komprimierten und unkomprimierten Daten. Einige kleine Zeichenfolgen tatsächlich größer werden, wenn Sie kodiert sind, also die reinen Daten gesendet wird, statt.
InformationsquelleAutor der Antwort whitebeard
Können Sie urllib3 leicht zu entschlüsseln gzip.
InformationsquelleAutor der Antwort Druska