gpt4 book ai didi

python - PYTHONIOENCODING 如何适应 python2

转载 作者:行者123 更新时间:2023-12-01 04:51:53 26 4
gpt4 key购买 nike

我试图了解 PYTHONIOENCODING 环境变量如何适合 Python2.7,因此我使用交互式提示尝试了以下操作:

antox@antox-pc ~/Scrivania $ export PYTHONIOENCODING='latin1'
antox@antox-pc ~/Scrivania $ /usr/bin/python2.7
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdin.encoding
'latin1'
>>> sys.stdout.encoding
'latin1'
>>> b = 'ÿ'
>>> b
'\xc3\xbf' #Shouldn't I get something like '\xff' because I set PYTHONIOENCODING to latin1? It looks as if utf-8 is been used instead
>>> print '\xff'
� # Why this odd character? Shouldn't I get 'ÿ' always for the reason above?

我的问题/疑问以评论的形式指出。

最佳答案

通过在环境中设置PYTHONIOENCODING,您告诉Python信任您的终端/操作系统有关编码的信息 - 您是在说您更了解,并且终端设备实际上接受该编码,而不是操作系统和c将告诉Python的任何编码。

因此,在这种情况下,您的意思是(无论它另有说法)您的终端实际上​​接受并正确格式化 latin-1 中的字节。

情况可能并非如此(如果您没有设置该环境变量,sys.stdout.encoding 会说什么?utf-8,我猜?)因此,您无法获得所需的显示效果并不奇怪:-)。

关于您的具体问题,

sys.getdefaultencoding()

告诉您在没有其他指示的情况下,Python 将使用什么编码在实际文本(即 Unicode)和字节字符串之间进行转换(I/O 到 stdin/stdout 不是这些情况之一,因为它使用这些文件的 encoding 属性)。

>>> b = 'ÿ'

这与 sys.stdin/stdout 无关——相反,您的终端在开放引号之后发送一些“转义序列”,这些序列归结为正确的 utf-8(例如,我的 Mac 终端应用程序就是这样做的) )。如果这是在没有正确源编码前导码的 .py 文件中,那么这将是一个语法错误 - 交互式解释器在 2.7.9 中已变成软体:-)

>>> print '\xff'
� # Why this odd character? Shouldn't I get 'ÿ' always for the reason above?

你已经告诉Python你的终端接受并正确显示latin-1字节序列(即使终端可能需要utf-8字节序列并告诉Python,你已经告诉Python忽略终端关于其编码的内容) ,或者更确切地说,操作系统所说的终端所说的:-)。

因此,值 255 的字节按原样发送,但终端有点不喜欢它(因为终端实际上​​不接受 latin-1!)并显示错误标记。

这是我的 Mac 上的一个典型示例(其中终端实际上​​接受“utf-8”):

ozone:~ alex$ PYTHONIOENCODING=latin-1 python -c "print u'\xff'"
?
ozone:~ alex$ PYTHONIOENCODING=utf-8 python -c "print u'\xff'"
ÿ
ozone:~ alex$ python -c "print u'\xff'"
ÿ

让 Python 自行正确检测终端编码,或强制其采用正确的编码,从而正确显示。

强制将编码设置为终端实际上​​接受的编码,毫不奇怪,无法正确显示。

如果您将一台古老的电传打字机连接到计算机的串行端口,该电传打字机实际上接受 latin-1(但操作系统无法正确检测到该事实),PYTHONIOENCODING 将帮助您正确执行 Python那个古老的电传打字机上的 I/O。否则,所述环境设置不太可能对您有多大用处:-)。

关于python - PYTHONIOENCODING 如何适应 python2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28254870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com