返回unicode字符串的__str__方法在一个环境中工作,但在另一个环境中失败

时间:2012-10-10 17:52:41

标签: python

我想,我理解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模块),两个print语句都可以完美地工作。控制台窗口说:

2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3]
utf-8
utf-8
öäü
äöü

有人可以向我解释问题是什么吗?为什么__str__方法适用于一种情况但不适用于另一种情况?解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:7)

请参阅此相关问题:Python __str__ versus __unicode__

基本上,你应该实现特殊方法__unicode__而不是__str__,并添加一个调用__str__的存根__unicode__

def __str__(self):
    return unicode(self).encode('utf-8')