
“UnicodeEncodeError:'ascii' codec can't encode characters in position 0-1: ordinal notin range(128)”
这句提示估计都经常见到,具体原因下面慢慢分析。
不爱废话,精简总结
首先弄清楚decode和encode的作用,这两者肯定跟中间编码unicode有关。
我们把"de"想成后退,"en"想成前进。退一步unicode,进一步其他code,分析得蹩脚,但是好记。
str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
括号里总是其他code。
字符串格式:如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。
python的默认编码是ascii
isinstance(s,unicode)#用来判断是否为unicode
改变默认编码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
能解决大部分问题,包括开头的问题。
s=u"中文"——这样就是unicode编码格式,来一剂治百病良药
#良药!!!!!
#coding=utf-8
s="中文"
if isinstance(s, unicode):
#s=u"中文"
print s.encode('gb2312')
else:
#s="中文"
print s.decode('utf-8').encode('gb2312')
网友评论