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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top