我有一个名为 a.py 的 Python 脚本:
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
print u''
在 bash 和 tcsh 中:
$ a.py
Ô£øÔ£øÔ£øÔ£ø
$ echo `a.py`
Traceback (most recent call last):
File "a.py", line 3, in <module>
print u'Ô£øÔ£øÔ£øÔ£ø'
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
错误来自 Python,而不是 shell。在反引号下运行脚本如何影响脚本本身?请注意,如果我在脚本开头将解释器切换到 Python 3,这不是问题。
最佳答案
当 Python 没有检测到它正在打印到终端时,就像在子 shell 中一样,sys.stdout.encoding 被设置为 None。打印 unicode 时,会使用 ascii 编解码器(至少在 Python2 中是这样)。如果 unicode 包含 0-127 之外的代码点,这将导致 UnicodeError。
解决此问题的一种方法是将 PYTHONIOENCODING 环境变量设置为适当的编码。例如:
export PYTHONIOENCODING=utf-8; echo `a.py`
致谢转至 unutbu !
关于Python 脚本打印 unicode,在 shell ` ` 中使用导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192893/