我正在阅读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
答案 0 :(得分:1)
因为message
(和msg.text
)不是str
而是unicode
个对象。要调用str()
,您需要再次指定utf-8作为编码。您的__str__
方法应如下所示:
def __str__(self):
return self.text.encode('utf-8')
unicode
如果只包含ASCII字符,则可以隐式编码为str
,这就是输入包含变音符号时只能看到错误的原因。