我想转换字符串u'Eichst\xe4tt-Landershofen'
,以便在终端上打印对象station
。在
import json
class Station(object):
def __init__(self,id, name, latitude, longitude):
self._id = id
self._name = name
self._latitude = latitude
self._longitude = longitude
....
def get_name(self):
return self._name
def __repr__(self):
return '<object=%s - id=%s, name=%s, latitude=%s, longitude=%s>' \
% (self.__class__.__name__, self._id, self._name, self._latitude,\
self._longitude)
如果我调用对象的get_name()
函数station
,一切正常。但是,如果我试图用函数__repr__
打印整个对象,就会出现以下错误:
字符串u'Eichst\xe4tt-Landershofen'
正被一个具有encoding='ISO-8859-1'
的文件读取。在
首先,我建议不要在第一时间使用}。在
__repr__
来表示这个对象,它实际上并不是要作为一个人类可读的对象表示。为此,您应该查找__str__
,__format__
,和/或{现在,您的问题是}绑定到unicode对象时,python2会自动将bytestring模板“升级”为unicode,以实现替换。在
__repr__
返回一个unicode对象。这是因为当您使用字符串替换'<name %s>' % _name
和{现在,在看到repr返回的unicode对象时,python将尝试通过使用
sys.getdefaultencoding()
对其进行编码来获得一个bytes对象,这显然是“ascii”的,但由于无法使用ascii字符集对工作站进行编码,因此失败了。在如果您绝对希望
repr
中包含非ascii字符(为什么??)你必须选择一个你的终端能理解的编码,并编码到那个字符集。下面是一个utf-8的示例,它可能会在您的系统上运行:相关问题 更多 >
编程相关推荐