2013-08-17 20 views
4

我試圖修改用戶表單提交的一些二進制數據,並將其寫入Google Cloud Storage。我試圖按照Google document's example,但在書寫時我的錯誤,如:如何使用GAE的Python API將原始字節寫入Google雲存儲

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 34: ordinal not in range.

我的代碼很簡單,如下

gcs_file = gcs.open(filename,'w',content_type='audio/mp3') 
gcs_file.write(buf) 
gcs_file.close() 

我試圖打開與「WB」模式文件,但有一個「無效模式wb「。錯誤。

我在GCS's maillist上發現了一個類似的問題,這個問題在Java上。 GCS開發團隊的建議是使用writeChannel.write()而不是PrintWriter。任何人都可以建議如何使它在Python中工作嗎?

+1

哪一行產生錯誤? 'gcs.open'或'.write'? – jterrace

+0

.write()函數 – user2686101

+0

你可以發佈完整的堆棧跟蹤嗎? – jterrace

回答

4

我想問題是,gcs_file.write()方法需要類型「str」的數據。由於您的buf類型是「unicode」,並且顯然包含一些Unicode字符(可能在ID3標籤中),您將得到UnicodeDecodeError。所以你只需要將buf編碼爲UTF-8:

gcs_file = gcs.open(filename,'w',content_type='audio/mp3') 
gcs_file.write(buf.encode('utf-8')) 
gcs_file.close() 
+0

添加'encode'行解決了我的問題。上傳一些圖像文件時出現錯誤。我的錯誤是:'期望str,但得到'我使用GAE Python – gsinha

+0

@ Denisigo。對不起回來晚了,只是發現這個問題仍然存在。就我而言,由於我修改了應用程序架構,編碼發生了很大的變化,我沒有機會驗證您的答案,但看起來相當有前途。 – user2686101

相關問題