python2的编码问题
2018-02-05 本文已影响0人
不懒狮Blaise
新手遇到编码问题都是很头疼的问题。
In [1]: a = u'你好'
In [2]: a
Out[2]: u'\u4f60\u597d'
In [4]: b = a.encode('utf8')
In [5]: b
Out[5]: '\xe4\xbd\xa0\xe5\xa5\xbd'
这个时候str(a)就报错了。
?[0;31mUnicodeEncodeError?[0m: 'ascii' codec can't encode characters in position 0-
1: ordinal not in range(128)
python str() 会把字符串转换为默认编码,然后转回utf8码, 如果没有setdefaultencoding,那么默认为ascii编码。
所以上面的子超出128,转换的时候就报错了。
类似的还有a+b, 会把b转换为unicode,这样首先要把utf8转码为ascii,但是系统不知道你是utf8,那么就报错了。
下面是解决版本
import sys
reload(sys)
sys.setdefaultencoding('utf8')
In [47]: a+b
Out[47]: u'\u4f60\u597d\u4f60\u597d'
因为系统把默认编码改为utf8, b转换为unicode就不用转为ascii了。