UnicodeEncodeError仅在Python中使用str(text)

时间:2015-03-27 20:23:10

标签: python encoding

我正在阅读utf-8编码文件。当我直接打印文本时,一切都很好。当我使用msg.__str__()打印课程中的文本时,它也有效。 但我真的不知道如何仅使用str(msg)进行打印,因为这会导致错误"' ascii'编解码器不能对字符u' \ xe4'进行编码。位置10:序数不在范围内(128)" 如果在文本中是变音符号。

示例代码:

 #!/usr/bin/env python
 # encoding: utf-8

 import codecs from TempClass import TempClass

 file = codecs.open("person.txt", encoding="utf-8") message =
 file.read() #I am Mr. Händler.

 #works
 print message

 msg = TempClass(message)
 #works
 print msg.__str__()
 #works
 print msg.get_string()

 #error
 print str(msg)

上课:

class TempClass(object):

def __init__(self, text):
    self.text = text

def get_string(self):
    return self.text

def __str__(self):
    return self.text

我尝试以多种方式对文本进行解码和编码,但对我来说没有任何作用。

帮助? :)

编辑:我使用的是Python 2.7.9

1 个答案:

答案 0 :(得分:1)

因为message(和msg.text)不是str而是unicode个对象。要调用str(),您需要再次指定utf-8作为编码。您的__str__方法应如下所示:

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

unicode如果只包含ASCII字符,则可以隐式编码为str,这就是输入包含变音符号时只能看到错误的原因。