2016-01-24 24 views
0

使用urllib2或urllib3或httplib2發佈二進制數據時,我收到錯誤UnicodeDecodeError: 'utf8' codec can't decodeUnicodeDecodeError: 'ascii' codec can't decode...,具體取決於Python腳本是處於UniCode還是ASCII模式。Python:發佈二進制數據會導致UnicodeDecodeError或Ascii解碼錯誤

我首先想到庫是問題,所以我嘗試了不同的庫,但沒有解決問題。

堆棧跟蹤的結尾:

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 895, in _send_output 
    msg += message_body 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc4 in position 627: invalid continuation byte 

回答

0

的問題,如評論到Python bug 11898注意的是,URL字符串成爲標籤在某些時候作爲一個Unicode或ASCII字符串。

然後,當httplib的庫創建用於整個HTTP/S消息的字節串,並且執行

msg += message_body 

行,Python的嘗試轉換message_body(其中包含二進制數據)來完成的Ascii或Unicode。無論哪種情況,轉換都會失敗。

解決方案 使用str()時對url進行任何修改。在我的情況下:

url = baseUrl + "/envelopes"  # throws UnicodeDecodeError 
url = str(baseUrl + "/envelopes") # works great 

如果這還不夠,請檢查其他字符串以確保它們未被標記爲Unicode或Ascii。

相關問題