Python 转换终端上带有_repr__的显示对象的unicode字符串
我想转换字符串Python 转换终端上带有_repr__的显示对象的unicode字符串,python,unicode,encoding,character-encoding,python-2.x,Python,Unicode,Encoding,Character Encoding,Python 2.x,我想转换字符串u'Eichst\xe4tt Landershofen',以便在终端上打印对象站 import json class Station(object): def __init__(self,id, name, latitude, longitude): self._id = id self._name = name self._latitude = latitude self._longitude = long
u'Eichst\xe4tt Landershofen'
,以便在终端上打印对象站
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)
字符串
u'Eichst\xe4tt-Landershofen'
被一个文件读取,该文件使用encoding='ISO-8859-1'
首先,我建议不要使用\u repr\uuuu
,因为它并不是真正用于人类可读的对象表示。为此,您应该查看\uuuuu str\uuuuuuuu
、\uuuuuu格式\uuuuuuuuu
,和/或\uuuuuuuu unicode\uuuuu
现在,您的问题是\uuuu repr\uuu
正在返回一个unicode对象。这是因为当您使用字符串替换''%\u name
并且\u name
绑定到unicode对象时,python 2会自动将bytestring模板“升级”为unicode以实现替换
现在,当看到从repr返回的unicode对象时,python将尝试通过使用sys.getdefaultencoding()
(显然是“ascii”)对字节对象进行编码来获取该对象,但由于无法使用ascii字符集对该站进行编码而失败
如果您绝对希望在repr
(为什么??)中使用非ascii字符,则必须选择终端能够理解的编码,并编码到该字符集。以下是utf-8的一个示例,它可能会在您的系统上工作:
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 __unicode__(self):
return u'<object={} - id={}, name={}, latitude={}, longitude={}>'.format(
self.__class__.__name__,
self._id,
self.get_name(),
self._latitude,
self._longitude,
)
def __repr__(self):
return unicode(self).encode('utf8')
导入json
类站(对象):
定义初始(自我、id、姓名、纬度、经度):
self.\u id=id
self.\u name=name
自身纬度=纬度
自身经度=经度
def get_名称(自身):
返回self.\u name
def ___; unicode(自):
返回u“”。格式为(
self.\uuuuu类\uuuuuuu名\uuuuuuuuu,
自我识别,
self.get_name(),
自身纬度,
自我.\u经度,
)
定义报告(自我):
返回unicode(self).encode('utf8')
当您添加.encode('iso-8859-1')
时,您得到了什么?我得到了输出:
。可以转换吗� 转换为可读字符?@BurhanKhalid:源文件是iso-8859-1
,但我们不知道终端选择了什么编码。希望它是'utf-8'
。当您添加时,它能工作吗?相反,编码('utf-8')
?顺便说一句,在询问Unicode问题时,您应该始终添加Python版本标记,因为Python 3处理Unicode的方式与Python 2完全不同。如果我将函数get\u name(self)
中的self.name
更改为self\u name.encode('UTF-8')
,我会得到与.encode('iso-8859-1')
相同的输出。
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 __unicode__(self):
return u'<object={} - id={}, name={}, latitude={}, longitude={}>'.format(
self.__class__.__name__,
self._id,
self.get_name(),
self._latitude,
self._longitude,
)
def __repr__(self):
return unicode(self).encode('utf8')