我想,我理解 unicode 和 python。但是这个问题让我很困惑。看这个小测试程序:
# -*- coding: utf-8 -*-
class TestC(object):
def __str__(self):
return u'äöü'
import sys
print sys.version
print sys.stdin.encoding
print sys.stdout.encoding
print u'öäü' #this works
x = TestC()
print x #this doesn't always work
当我从 ubuntu 上的 bash 终端运行它时,我得到以下结果:
2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3]
utf-8
utf-8
öäü
Traceback (most recent call last):
File "test_mod.py", line 14, in <module>
print x #this doesn't '
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
但是,当我在 Eclipse 中运行相同的东西(使用 pydev 模块)时,两个打印语句都可以完美运行。控制台窗口说:
2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3]
utf-8
utf-8
öäü
äöü
有人可以向我解释问题是什么吗?为什么 __str__ 方法在一种情况下有效,而在另一种情况下无效?解决此问题的最佳方法是什么?