字符串在Python內部的表示是unicode編碼,所以,在作編碼轉換時,一般須要以unicode做爲中間編碼,即先將其餘編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另外一種編碼。
Decode的做用是將其餘編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。
Encode的做用是將unicode編碼轉換成其餘編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。
所以,轉碼的時候必定要先搞明白,字符串str是什麼編碼,而後decode成unicode,而後再encode成其餘編碼
代碼中字符串的默認編碼與代碼文件自己的編碼一致。
python在安裝時,默認的編碼是ascii,當程序中出現非ascii編碼時,python的處理經常會報這樣的錯UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python沒辦法處理非ascii編碼的,此時須要本身設置將python的默認編碼,通常設置爲utf8的編碼格式。
解決方法有三中:
1.在命令行修改,僅本會話有效:
1)經過>>>sys.getdefaultencoding()查看當前編碼(若報錯,先執行>>>import sys >>>reload(sys));
2)經過>>>sys.setdefaultencoding('utf8')設置編碼
2.較繁瑣,最有效
1)在程序文件中如下三句
import sys
reload(sys)
sys.setdefaultencoding('utf8')
3.修改Python本環境(推薦)
在Python的Lib\site-packages文件夾下新建一個sitecustomize.py文件,內容爲:
#coding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
重啓Python解釋器,發現編碼已被設置爲utf8,與方案二同效;這是由於系統在Python啓動的時候,自行調用該文件,設置系統的默認編碼,而不須要每次都手動加上解決代碼,屬於一勞永逸的解決方法。html
值得說明的是,對於str和unicode之間的轉換:python
str--->unicode: str.decode(編碼格式)網絡
unicode-->str: unicode.encode(編碼格式)
----以上內容均摘自網絡,若有侵權,告知修改。
引用地址:
1.UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal - bjkandy http://www.tuicool.com/articles/qiqi2i
2.UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) http://www.cnblogs.com/bluescorpio/p/3594359.htmlui