我使用的是python2.7。我的终端的编码方案被设置为“utf-8”。Python的默认编码方案是“ascii”。在
>>> sys.getdefaultencoding() 'ascii'
当我写作的时候
^{pr2}$正确的Unicode字符显示在我的终端上。我不知道python解释器在将Unicode代码点发送到终端之前使用什么编码方案对其进行编码。是UTF-8吗?但是python的默认编码方案被设置为“ascii”。它如何决定使用UTF-8编码。在
编辑:
我知道我可以自己指定如下编码:
>>> print(u'à'.encode('utf-8')) à
但是我想知道当我不指定编码时它是如何工作的。在
显然,python从路径中的
LC_CTYPE
变量中获取sys.stdout
的编码方案。在Python尝试确定终端编码,并在打印到终端时使用该编码。
sys.stdout.encoding
包含检测到的编码。getdefaultencoding()
是未指定编码时用于对Unicode字符串进行编码的编码。在示例(Windows控制台中的Python 2):
打印到终端使用
^{pr2}$sys.stdout.encoding
。我使用在终端编码中无效的Unicode字符来查看错误消息中的编码:这里我不指定编码,它使用默认值:
示例(Windows控制台中的Python 3):
打印仍使用
sys.stdout.encoding
:但是编码默认值是Python 3的默认值
utf-8
:重定向输出
重定向Python脚本的输出时,
sys.stdout.encoding
的值可以更改。这可以用PYTHONIOENCODING
环境变量覆盖。在Python2重定向不检测编码。它将默认为
ascii
:Python3使用
ANSI
编码(因Windows本地化版本而异):使用环境变量重写:
相关问题 更多 >
编程相关推荐