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

标签 python bash python-2.7 unicode

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

相关文章:

bash - bash 的开始结束还是括号?

linux - Tcl 如何在此脚本中显示名称?

python - 导入错误:没有名为 pynotify 的模块。安装模块时

python - 洗牌列表,但保持一些元素卡住

python - Pandas Dataframe 根据具有相等值的两列删除行

c++ - 在 boost Homebrew 软件安装中找不到 bjam

python - Seaborn 中修改的 Bland-Altman 图

python - 从字典中删除索引

linux - 将 key 发送到终端

Python2正则表达式似乎有问题