Skip to main content
 首页 » 编程设计

Python 脚本打印 unicode,在 shell ` ` 中使用导致错误

2025年05月04日16jpfss

我有一个名为 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 !