Python 出現的UnicodeDecodeError的幾種情況記錄及解決辦法

1.python2.7 ide今天寫腳本測試網頁調用HTMLTestRunner生成測試報告地方,出現了編碼錯誤:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

原因是python的str默認是ascii編碼,和unicode編碼衝突,就會報這個標題錯誤

解決辦法(在代碼中添加如下幾行):

import sys
reload(sys)
sys.setdefaultencoding('utf8')


2.Python3.6 UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 24137: invalid start byte(字節型字符串解碼爲字符串)

一個可能解決辦法(添加忽略錯誤):decode('utf-8', 'ignore')

3.Python3.6.1 open 打開Excel文件時出現:

UnicodeDecodeError:open(‘xxx.xsl’)(默認讀取方式爲'r',encoding不管是用utf8、gb2312、gbk編碼方式都不行)

解決辦法:

改爲以二進制的方式讀取即可:open('xxx.xsl','rb')

4.python3.6.1 open打開jpg圖片調用requests執行上傳時出現:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256) 

當時出現的原因是:request請求的自定義頭部中包含了中文

解決辦法:別用中文。。。。或將自定義頭添加的請求參數中文進行轉碼xxx.encode("utf8")---如果請求使用session,轉碼方法無效,還是別用中文

ps:

當出現編碼問題問題時,python默認的出現信息並沒有告訴你具體出錯的參數,只是告訴你出錯的原因和出錯的代碼位置,有時候不一定能找到原因(就像在這個問題中我一直以爲是請求參數讀取圖片後編碼不正確,一直修改編碼方式都不行。。。。最後把自定義頭部代碼屏蔽了才發現是自定義頭的中文導致),爲了快速定位問題具體出錯的參數,可以將異常信息打印,以便快速找到出錯的變量:

try:

except BaseException as e:

print(repr(e))------------打印出錯具體的變量
print(str(traceback.format_exc())------打印出錯的原因+代碼行+文件(和正常運行的異常信息類似)

 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章