【发布时间】:2011-12-22 09:46:51
【问题描述】:
我首先要说我已经看过这篇文章:Strange python print behavior with unicode,但是那里提供的解决方案(使用 PYTHONIOENCODING)对我不起作用。
这是我的问题:
Python 2.6.5 (r265:79063, Apr 9 2010, 11:16:46)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
>>> a = u'\xa6'
>>> print a
¦
工作得很好,但是:
>>> sys.stdout.write(a)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa6' in position 0: ordinal not in range(128)
引发错误。我在顶部链接到的帖子表明这是因为默认控制台编码是“ascii”。但是,就我而言,它不是:
>>> sys.stdout.encoding
'UTF-8'
那么对这里的工作原理以及如何解决这个问题有什么想法吗?
谢谢 D.
【问题讨论】:
-
在带有 utf-8 终端编码的 python 2.7 上,一切似乎都正常。你能试试 sys.stdout.write(a.encode("UTF-8")) 看看会发生什么吗?
-
是的,那行得通...糟糕,我刚刚意识到我使用了错误的 Python 版本来生成示例。我应该使用 2.6.5。那么为什么会这样呢? 2.7 之前的 Python 中的错误?
-
显然,当尝试写入标准输出时,您的 Python 尝试使用 ascii 对您的 unicode 对象进行编码,但失败得很惨。我不知道为什么,但我的不这样做:)
标签: python python-2.7 unicode stdout