Python3和编码:在linux和OSX上有所不同吗?

时间:2013-11-16 18:31:18

标签: python unicode encoding python-3.x decode

此字符串:

line = '\tlong_plugin_output=\x88\\\\\x97\xe5\xff\x7f\\n'

..打印时,在我的Macbook Pro上产生以下输出:

>>> line = '\tlong_plugin_output=\x88\\\\\x97\xe5\xff\x7f\\n'

>>> line
'\tlong_plugin_output=\x88\\\\\x97åÿ\x7f\\n'

>>> print(line)
    long_plugin_output=\\åÿ\n

..但是它在我的ubuntu服务器上产生了这个错误:

>>> line = '\tlong_plugin_output=\x88\\\\\x97\xe5\xff\x7f\\n'

>>> line
'\tlong_plugin_output=\x88\\\\\x97\xe5\xff\x7f\\n'

>>> print(line)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\x88' in position 20: ordinal not in range(128)

我在macbook上运行的python版本:

  

Python 3.3.2(v3.3.2:d047928ae3f6,2013年5月13日,13:52:24)[GCC 4.2.1   (Apple Inc. build 5666)(第3点)]在达尔文上

     

$ uname -a Darwin MacBook-Pro.local 11.4.2 Darwin内核版本   11。4。2:2012年8月23日16:25:48 PDT 2012; root:xnu-1699.32.7~1 / RELEASE_X86_64 x86_64

我在我的Ubuntu服务器上运行的python版本:

  

Python 3.2.3(默认,2013年9月25日,18:25:56)[gCC 4.6.3] on linux2

     

$ uname -a Linux net.local.net 3.2.2#3 SMP Thu 1月26日20:18:37 UTC   2012 i686 i686 i386 GNU / Linux

在这些平台上可能导致不同行为的原因是什么?

1 个答案:

答案 0 :(得分:3)

Python询问终端正在使用什么编码,并在打印时将unicode字符串编码为字节。您的Ubuntu服务器未配置为UTF-8显示器,您的Mac终端

有关切换终端区域设置的帮助,请参阅https://askubuntu.com/questions/87227/switch-encoding-of-terminal-with-a-command。任何可以处理您尝试打印的特定代码点的区域设置都可以,但UTF8可以处理所有Unicode。

您可以通过打印sys.stdout.encoding来查看Python检测到的内容:

>>> import sys
>>> sys.stdout.encoding
'UTF-8'