此字符串:
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
在这些平台上可能导致不同行为的原因是什么?
答案 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'