python的unicodedecodeerror: 'utf8' codec&nbs" rel="noopener noreferrer">python中文編碼老是出錯問題 python的unicodedecodeerror: 'utf8' codec&nbs
sungis
python的unicodedecodeerror: 'utf8' codec can't decode byte 0*** in position
這個錯誤是因為你**中的某個字串使用了費ascii編碼的字元,也就是它代表的16進製制的編碼超過127。
解決這個問題可以使用下面的方法解決,其實就是設定預設的編碼。python 2.x的預設編碼是ascii,如果改為utf-8,就可以了。
import sys
reload( sys )
sys.setdefaultencoding('utf-8')
其實從python 3.0以後預設就用utf-8,就沒有這個問題了。
新手寫pyhton程式經常遇到編碼問題,其實是對py的編碼不熟悉,經常範小毛病,鬱悶好久。。。
今天終於搞懂的py的編碼。
1. pyhton的所有內建庫、方法接受的是unicode編碼的字串。
2. str.decode 函式就是轉成unicode編碼,所以能decode的字串傳級python的內建庫、函式都能正確執行。
3.問題在於這個decode函式解碼時到底要傳哪個引數:utf-8,gbk,gb2312......等n種編碼。引數不當,就會拋類似異常:
unicodedecodeerror: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence
unicodedecodeerror: 'utf8' codec can't decode bytes in position 0-1: invalid data
下面舉個例子:
#coding:utf-8
#指定本檔案編碼為utf8
import os
# 以下為示例**,不一定能執行。隨意寫的,無編譯執行過。
# 例子以xp平台為例,因為linux平台編碼(utf-8)與window平台(gbk)不一樣。
# 假設d盤下面有很多中文名稱檔案
filelist = os.listdir(r"d:\") # 此處返回的list中的中文是以gbk編碼的,你可以通過檢視cmd視窗屬性看到。
for path in filelist:
if os.path.isdir(path): continue
fp = open(path.decode("gbk") , 'rb')
# 如果此處用 path.decode("utf-8") 就會拋異常,原因是wind的dir命令返回的是gbk編碼
print len(fp.read())
fp.close()
filepath =r"d:\中文檔案.doc"
# 假設此文存在,記得要帶中文
fp = open(filepath.decode('utf-8'), "rb") #這裡使用utf8引數進行解碼,原因是檔案頭里有句coding: utf-8
print len(fp.read())
fp.close()
path2 = u"d:\中文檔案.doc"
# 假如這裡有個u在前面,這個變數就是unicode編碼了,不用解碼。
fp = open(path2, 'rb')
print len(fp.read())
fp.close()
spring mybatis中文亂碼編碼問題
配置檔案 這裡有一點需要注意的是,在xml配置檔案中,需要將 符號轉義,所以這裡要寫成 id ds class org.apache.commons.dbcp.basicdatasource name driverclassname value com.mysql.jdbc.driver name ...
Python 中文編碼
python 檔案中如果未指定編碼,在執行過程會出現報錯 usr bin python print 你好,世界 以上程式執行輸出結果為 file test.py line 2 syntaxerror non ascii character xe4 in file test.py on line 2,...
Python 中文編碼
在python中如果輸出中文字元 你好,世界 就有可能會碰到中文編碼問題。python 檔案中如果未指定編碼,在執行過程會出現報錯 usr bin python print 你好,世界 以上程式執行輸出結果為 file test.py line 2syntaxerror non ascii char...