3

私は、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__ メソッドが機能するのに、別のケースでは機能しないのはなぜですか? これを修正する最善の方法は何ですか?

4

1 に答える 1

7

この関連する質問を参照してください: Python __str__ vs __unicode__

__unicode__基本的に、おそらくではなく特別なメソッドを実装し、を呼び出す__str__スタブを追加する必要があります。__str____unicode__

def __str__(self):
    return unicode(self).encode('utf-8')
于 2012-10-10T17:56:49.637 に答える