为什么在Python2.4中,Unicode数据会出现ASCII编码错误,而在2.7中却没有?

为什么在Python2.4中,Unicode数据会出现ASCII编码错误,而在2.7中却没有?,python,exception,unicode,encoding,Python,Exception,Unicode,Encoding,我有一个程序,当在Python2.7中运行时,它会生成标准输出的正确Unicode输出。在Python2.4中运行时,我发现UnicodeEncodeError:“ascii”编解码器无法对位置1-4中的字符进行编码:序号不在范围(128)。在2.4版和2.7版之间发生了什么变化,现在可以使用了?尽管我在其他地方找不到任何关于它的提及,但Python 2.7似乎正在自动将文本转换为终端编码,而不是像预期的那样抛出错误 Python 2.7: > echo $LANG en_US.UTF-8

我有一个程序,当在Python2.7中运行时,它会生成标准输出的正确Unicode输出。在Python2.4中运行时,我发现UnicodeEncodeError:“ascii”编解码器无法对位置1-4中的字符进行编码:序号不在范围(128)。在2.4版和2.7版之间发生了什么变化,现在可以使用了?

尽管我在其他地方找不到任何关于它的提及,但Python 2.7似乎正在自动将文本转换为终端编码,而不是像预期的那样抛出错误

Python 2.7:

> echo $LANG
en_US.UTF-8
> python -c 'import sys; print sys.getdefaultencoding()'
ascii

> python -c 'import sys; sys.stdout.write(u"\u03A3")'
Σ
> python -c 'import sys; sys.stdout.write(u"\u03A3".encode("utf8"))'
Σ
Python 2.6(在另一个框中)

>echo$LANG
en_US.UTF-8
>python-c的导入系统;打印sys.getdefaultencoding()
ascii码
>python-c的导入系统;系统标准输出写入(u“\u03A3”)'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeEncodeError:“ascii”编解码器无法对位置0中的字符u'\u03a3'进行编码:序号不在范围内(128)
>python-c的导入系统;sys.stdout.write(u“\u03A3”.encode(“utf8”))'
Σ

在任何情况下,在输出之前在数据上加一个.encode(“utf8”)应该可以避免这个问题。

我们不是通灵者。显示代码。@Karl Knechtel:它来自这样一个语句:
sys.stdout.write(unicode(数据))
sys.stdout.write(数据)
。问题是,这意味着问题来自其他地方…我不知道在哪里(应用程序相对较大);打印sys.getdefaultencoding()以查看两者的默认unicode到字符串编码是否不同。@Russell Borogove:好的,有趣的,让我看看……两者都返回“asciii”!真令人费解!在出现故障时,您还可以告诉我们有关数据(其来源、值)的更多信息吗?为什么.encode(“utf-8”)不.encode(“utf-8”)您.encode(“utf-8”)只是.encode(“utf-8”)集合.encode(“utf-8”)流.encode(“utf-8”)encode.encode(“utf-8”)用于.encode(“utf-8”)stdout.encode(“utf-8”)到.encode(“utf-8”)be.encode(“utf-8”utf-8.encode(“utf-8”)所有.encode(“utf-8”)时间?.encode(“utf-8”)保存.encode(“utf-8”)的.encode(“utf-8”)的.encode(“utf-8”)和.encode(“utf-8”)大量.encode(“utf-8”)烦扰.encode(“utf-8”)的.encode(“utf-8”)特殊.encode(“utf-8”)排序这不是他的问题的答案,但如果有人感兴趣的话:
import sys,codecs;sys.stdout=codecs.getwriter('utf8')(sys.stdout)
谢谢。我自己运行的
PYTHONIOENCODING
设置为
utf8
,但大多数人似乎都接受Python的heisencoding策略。这让我很困惑。