base64 in Python png auf Windows
Frage
Wie codieren Sie ein PNG-Bild in base64 mit Python unter Windows?
iconfile = open("icon.png")
icondata = iconfile.read()
icondata = base64.b64encode(icondata)
Das oben funktioniert unter Linux und OSX, aber unter Windows wird es die ersten Zeichen dann kurz geschnitten kodieren. Warum ist das?
Lösung
Öffnen Sie die Datei im Binärmodus :
open("icon.png", "rb")
Ich bin nicht sehr vertraut mit Windows, aber ich kann mir vorstellen, was passiert ist, dass die Datei ein Zeichen (0x1A) enthält, die a href <= "http://www.google.com/search?q=windows + + Ende von + file + Zeichen“rel =‚noreferrer‘> Windows ist als das Ende der Datei Interpretation (für Legacy-Gründe), wenn es im Textmodus geöffnet wird. Das andere Problem ist, dass eine Datei im Textmodus öffnen (ohne die ‚b‘) auf Windows verursacht Zeilenende neu geschrieben werden, die in der Regel binäre Dateien brechen, wo diese Zeichen nicht wirklich das Ende einer Zeile.
Andere Tipps
Um die Antwort von Miles, die ersten acht Bytes in einer PNG-Datei sind speziell:
- 89 - das erste Byte ein Scheck, Bit 8 nicht beraubt worden
- „PNG“ - lassen Sie jemand lesen, dass es ein PNG-Format
- 0d 0a - das DOS end-of-line Indikator, um zu überprüfen, wenn es DOS-> Unix-Umwandlung
- 1a - das DOS End-of-Datei Zeichen, zu überprüfen, ob die Datei geöffnet wurde Binär-Modus
- 0a - Unix-end-of-line-Charakter, zu prüfen, ob ein Unix-> DOS war Umwandlung
Ihr Code hält an der 1a, wie vorgesehen.