“UnicodeEncodeError:'ascii' codec can't encode characters in position 0-1: ordinal notin range(128)”
這句提示估計(jì)都經(jīng)常見到,具體原因下面慢慢分析砰奕。
不愛廢話蛛芥,精簡總結(jié)
首先弄清楚decode和encode的作用,這兩者肯定跟中間編碼unicode有關(guān)军援。
我們把"de"想成后退仅淑,"en"想成前進(jìn)。退一步unicode盖溺,進(jìn)一步其他code漓糙,分析得蹩腳铣缠,但是好記烘嘱。
str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉(zhuǎn)換成unicode編碼蝗蛙。
str2.encode('gb2312')蝇庭,表示將unicode編碼的字符串str2轉(zhuǎn)換成gb2312編碼。
括號里總是其他code捡硅。
字符串格式:如果是在utf8的文件中哮内,該字符串就是utf8編碼,如果是在gb2312的文件中壮韭,則其編碼為gb2312北发。
python的默認(rèn)編碼是ascii
isinstance(s,unicode)#用來判斷是否為unicode
改變默認(rèn)編碼:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
能解決大部分問題,包括開頭的問題喷屋。
s=u"中文"——這樣就是unicode編碼格式琳拨,來一劑治百病良藥
#良藥!M筒堋S印!恶耽!
#coding=utf-8
s="中文"
if isinstance(s, unicode):
#s=u"中文"
print s.encode('gb2312')
else:
#s="中文"
print s.decode('utf-8').encode('gb2312')