2017-10-21 52 views
0

Je lis un blob à partir d'une base de données qui contient un fichier .png.flux d'octets et utf-8 en python 3

Le blob semble correct et est d'un type de données octets. Il commence:

b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x92\x00\x00\x00m\x08\x06\x00\x00\x00J\xbf8B\x00\x00\x00\x06bKGD\x00\x00\x00\x00\x00\x00\xf9C\xbb\x7f\x00\x00\x00\tpHYs\x00\x00\x0b\x13\x00\x00\ 

Cependant, quand je joue:

je reçois le message:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte 

Il semble traiter les octets comme une chaîne, mais pourquoi?

+1

Oops, est 'wx.Image()'. –

+0

Pouvez-vous nous indiquer la documentation de 'wx.Image()' que vous utilisez? Je ne peux pas sembler trouver un constructeur qui prend un tampon [dans la documentation que j'ai trouvé] (https://wxpython.org/Phoenix/docs/html/wx.Image.html#wx.Image) –

+0

Je don « t voir tout constructeur qui prend octets bruts: https://wxpython.org/Phoenix/docs/html/wx.Image.html#api-class-api –

Répondre

1

wx.Image() ne supporte pas la création d'une image à partir d'un flux d'octets brut. La classe a plutôt interprété cela comme un nom de fichier (qui doit être une chaîne, donc décodé).

Enveloppez vos données dans un objet io.BytesIO(); wx accepte ces objets sous forme de courants:

import io 

image = wx.Image(io.BytesIO(blob))