从屏幕截图可以看出,从终端和 Gedit 运行的相同脚本的行为不同 - 在终端脚本执行成功,但在 Gedit 中却引发错误:
但如果我python
在 Gedit 工具管理器中更改为PYTHONIOENCODING=utf-8 python
,那么脚本也将从 Gedit 正常执行
为什么会这样?终端中的哪种设置可以让 python“unicode”代码顺利执行?
当我添加赏金时,只是为了更新:不仅仅是 GEdit,而且在 SciTE 中也会出现错误,但在 Geany 中不会出现,因为 Geany 通过终端执行 Python 脚本
答案1
终端允许 python“unicode”代码无问题执行,因为它已 sys.stdout.encoding
正确设置。
我把脚本改成如下形式:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print sys.stdout.encoding
print u"富强"
在 Gedit 中运行,输出为:None
for sys.stdout.encoding
。
在终端中运行,输出UTF-8
为sys.stdout.encoding
并且字符串正确打印。
但是,如果我将区域设置LC_CTYPE
从更改en_US.UTF-8
为C
,并使用 在终端中运行它LC_CTYPE=C ./test.py
,我会得到以下信息:
ANSI_X3.4-1968
Traceback (most recent call last):
File "./test.py", line 7, in <module>
print u"富强"
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
sys.stdout.encoding
设置为 ASCII,因此无法处理字符串。