Question

Comment encodez-vous une image png en base64 en utilisant python sous Windows?

iconfile = open("icon.png")
icondata = iconfile.read()
icondata = base64.b64encode(icondata)

Ce qui précède fonctionne bien sous Linux et OSX, mais sous Windows, il encodera les premiers caractères puis sera coupé. Pourquoi est-ce?

Était-ce utile?

La solution

Ouvrez le fichier en mode binaire :

open("icon.png", "rb")

Je ne connais pas très bien Windows, mais j'imagine que le fichier contient un caractère (0x1A) Windows interprète comme la fin du fichier (pour des raisons héritées du passé) lorsqu'il est ouvert en mode texte. L'autre problème est que l'ouverture d'un fichier en mode texte (sans le "b") sous Windows entraînera la réécriture des fins de ligne, ce qui cassera généralement les fichiers binaires où ces caractères n'indiquent pas réellement la fin d'une ligne.

Autres conseils

Pour augmenter la réponse de Miles, le Les huit premiers octets d'un fichier PNG sont spécialement conçus:

  • 89 - le premier octet est une vérification qui le bit 8 n'a pas été dépouillé
  • " PNG " - laisser quelqu'un lire que c'est un Format PNG
  • 0d 0a - la fin de ligne DOS indicateur, pour vérifier s'il y avait Conversion DOS - > unix
  • 1a - le caractère de fin de fichier DOS, pour vérifier que le fichier a été ouvert dans mode binaire
  • 0a - caractère de fin de ligne unix, à vérifiez s'il y a bien un & DOS sous DOS conversion

Votre code s’arrête au 1a, comme prévu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top