python2的编码问题

新手遇到编码问题都是很头疼的问题。

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了。

你可能感兴趣的:(python2的编码问题)