2013-02-07 59 views
4
_f = open("c:/go-next.png", "rb") 
data = _f.read() 
_f.close() 
data.encode("utf-8") 

# Error: UnicodeDecodeError: file <maya console> line 1: ascii # 

正如您所看到的,我打開了一個圖像文件,並且數據是類型。但我必須將其轉換爲utf-8。 也許二進制數據有一些額外的字符(或不),它與轉換衝突。有什麼辦法解決它?python - 將二進制數據轉換爲utf-8

+1

你爲什麼要這麼做? – Keith

+1

我不是故意的,但將PNG轉換爲UTF8沒有任何意義。 PNG是一種圖像格式。 UTF8是一種文本編碼。你能解釋一下你在做什麼嗎? –

+0

我嘗試在HTTP中將我的數據發佈到SERVER。爲此,我參考[http://www.doughellmann.com/PyMOTW/urllib2/#uploading-files](http://www.doughellmann.com/PyMOTW/urllib2/#uploading-files)並使其成爲好。但是,要發佈特殊字符(如韓語),我必須以「UTF-8」格式發送它。服務器管理員告訴我這樣做:) –

回答

3

文本編碼僅適用於文本。不要試圖在二進制數據上使用它們。

+0

是的,我和我的同事設置了另一個POST模塊。 –

5

您可以隨時使用latin-1編解碼器將str映射到unicode。一旦你有一個unicode,您可以隨時對其進行編碼,在utf-8

data.decode('latin-1').encode("utf-8") 
+1

雖然這是真的,但結果沒有意義。 –

+5

沒有意義?一臺超級計算機曾經被問到:「生命的意義是什麼?」我非常肯定它的答案,''42'.decode('latin1')。encode('utf-8')'。 :-) – unutbu

+0

@ IgnacioVazquez-Abrams 「latin-1」編解碼器將代碼點「0-255映射到字節0x0-0xff」: https://docs.python.org/2/library/codecs.html#encodings因此,這正是你所期望的。 – yingted

1

你要完成也許可以通過編碼的base64它可以實現什麼。

import base64 
encoded = base64.b64encode(image_binary_data) 
0

編碼意味着將字符串轉換爲可存儲的字節。
解碼意味着將字節轉換爲可讀的字符串。

代碼中的data已經被編碼。

0

無法將圖像轉換爲類似於utf8中的章程。