python解释器采用什么编码_在发送到终端之前,Python2.7解释器使用什么编码方案对Unicode码位进行编码?...

Python尝试确定终端编码,并在打印到终端时使用该编码。sys.stdout.encoding包含检测到的编码。getdefaultencoding()是未指定编码时用于对Unicode字符串进行编码的编码。在

示例(Windows控制台中的Python 2):>>> import sys

'ascii'

>>> sys.stdout.encoding

'cp437'

打印到终端使用sys.stdout.encoding。我使用在终端编码中无效的Unicode字符来查看错误消息中的编码:

^{pr2}$

这里我不指定编码,它使用默认值:>>> u'\xc1'.encode()

Traceback (most recent call last):

File "", line 1, in

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc1' in position 0: ordinal not in range(128)

示例(Windows控制台中的Python 3):>>> import sys

>>> sys.getdefaultencoding()

'utf-8'

>>> sys.stdout.encoding

'cp437'

打印仍使用sys.stdout.encoding:>>> print('\xc1')

Traceback (most recent call last):

File "", line 1, in

File "D:\dev\Python35\lib\encodings\cp437.py", line 19, in encode

return codecs.charmap_encode(input,self.errors,encoding_map)[0]

UnicodeEncodeError: 'charmap' codec can't encode character '\xc1' in position 0: character maps to

但是编码默认值是Python 3的默认值utf-8:>>> '\xc1'.encode()

b'\xc3\x81'

重定向输出

重定向Python脚本的输出时,sys.stdout.encoding的值可以更改。这可以用PYTHONIOENCODING环境变量覆盖。在

Python2重定向不检测编码。它将默认为ascii:C:\>py -2 -c "import sys;print(sys.stdout.encoding)" | more

None

Python3使用ANSI编码(因Windows本地化版本而异):C:\>py -3 -c "import sys;print(sys.stdout.encoding)" | more

cp1252

使用环境变量重写:C:\>set PYTHONIOENCODING=utf8

C:\>py -2 -c "import sys;print(sys.stdout.encoding)" | more

utf8

C:\>py -3 -c "import sys;print(sys.stdout.encoding)"

utf8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值