我问过A python program fails to execute in sublime text 3, but success in bash。我做了一些研究,发现有必要开始一个新问题。你知道吗
在python2.7中,sys.getdefaultencoding()
是ascii码:
In [1]: import sys
In [2]: sys.getdefaultencoding()
Out[2]: 'ascii'
在我看来,打印对象等于print str(obj)
。如果obj
是unicode,它将被编码为ascii。例如(测试.py)地址:
#-*- encoding:utf-8 -*-
import sys
print sys.getdefaultencoding() # ascii
print "你好"
print u"你好" # should be an error occured: UnicodeEncodeError: 'ascii' codec...
但ipython中没有发生错误:
In [3]: print "你好"
你好
In [4]: print u"你好"
你好
为什么在ipython中打印unicode对象不会出错?我的理解不对?你知道吗
打印时,仅当Python无法确定终端编码时才使用默认编码。两者都适用于您的情况,因为第一个
"你好"
是已经在终端编码中编码的字节字符串。第二个u"你好"
是一个Unicode字符串,它将在终端编码中编码,前一个命令已经显示支持中文。你知道吗ascii
在python2.X将Unicode字符串强制转换为字节字符串时使用。例如,语句u'你好'.decode('utf8')
是一个常见错误,其中对Unicode字符串调用.decode()
,但只有字节字符串具有.decode()
方法。Python然后尝试使用默认的ascii
编解码器将Unicode字符串编码为字节字符串,以便可以调用.decode()
。你知道吗示例如下,但请注意这是一个编码错误而不是解码错误:
相关问题 更多 >
编程相关推荐