2015-04-12 1 views
-2

J'essaye d'écrire un fichier .png que je récupère sur le web avec Python.Difficulté d'écriture .png fichier python

with open(fileName, 'w+') as f: 
     f.write(data) 

codec 'ascii' ne peut pas encoder le caractère u '\ uFFFD' en position 0: ordinal dans la gamme (128)

J'ai essayé de le faire data.encode('utf-8'), mais quand j'utilise la magie avec Python obtenir le type mime, il le détecte comme un fichier .bin.

Existe-t-il une manière définie de gérer cela? Cela arrive parfois et pas d'autres.

Voici quelques plus d'informations:

Github link to code

API reference

+1

Vous semblez être recevoir vos données de la requête HTTP comme 'unicode' au lieu de' str' (ou 'bytes' sur Python3). C'est faux, car vos données PNG binaires ne sont pas du texte, et unicode n'a aucun sens dans le contexte des données binaires. Pouvez-vous publier le code que vous utilisez pour récupérer le fichier sur le Web? –

Répondre

1

Vous devez ouvrir le fichier en mode binaire:

with open(fileName, 'wb') as f: 
    f.write(data) 
+0

Ceci est requis (sous Windows), mais pas nécessairement suffisant. Il semble que l'OP reçoive les données de la requête HTTP comme 'unicode' - ce qui ne peut pas être exact puisqu'il ne s'agit pas de données texte, et ne fonctionnera pas pour l'écrire dans un fichier à moins qu'il ne le décode exactement encodage qui a été utilisé pour coder les données. –

+0

Je l'ai déjà essayé. Comment les autres modules Python savent-ils que c'est en binaire? Celui que j'utilise n'accepte qu'un chemin de fichier. – John