簡體   English   中英

返回unicode字符串的__str__方法在一個環境中工作,但在另一個環境中失敗

[英]The __str__ method returning a unicode string works in one environment but fails in another

我想,我理解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__方法適用於一種情況但不適用於另一種情況? 解決這個問題的最佳方法是什么?

請參閱此相關問題: Python __str__與__unicode__

基本上,您可能應該實現特殊方法__unicode__而不是__str__ ,並添加一個調用__unicode__的存根__str__

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM