2017-10-21 66 views
0

我正在從包含png文件的數據庫中讀取blob。Python中的字節流和utf-8 3

blob看起來是正確的,是一個字節數據類型。它開始:

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\ 

然而,當我執行:

我得到的消息:

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

這似乎是治療字節的字符串,但爲什麼呢?

+1

糟糕,這是'wx.Image()'。 –

+0

你能指點我們到你正在使用的'wx.Image()'的文檔嗎?我似乎無法找到一個緩衝區的構造函數[在我找到的文檔中](https://wxpython.org/Phoenix/docs/html/wx.Image.html#wx.Image) –

+0

我不喜歡看不到任何需要原始字節的構造函數:https://wxpython.org/Phoenix/docs/html/wx.Image.html#api-class-api –

回答

1

wx.Image()不支持從原始字節流創建圖像。該類將它解釋爲文件名(它必須是一個字符串,因此它正在被解碼)。

將數據包裝在io.BytesIO()對象中; wx接受流這樣的對象:

import io 

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