我对所有这些 unicode 问题感到非常厌倦。我需要用对象节点构建图。我需要展示这张图。我有可视化 unicode 字符串的问题。所以...要将对象作为图形节点,我需要覆盖相等和哈希方法
class VkUser:
def __init__(self,uid=None,f_name = None,l_name = None,json=None):
if(json==None):
self.uid=uid
self.l_name=l_name
self.f_name=f_name
else:
self.uid = json['uid']
self.f_name = json['first_name']
self.l_name = json['last_name']
def __eq__(self, other):
if isinstance(other, VkUser):
return (self.uid == other.uid)
return NotImplemented
def __ne__(self, other):
result = self.__eq__(other)
if result is NotImplemented:
return result
return not result
def __hash__(self):
return hash(self.uid)
但是,如果我不想将指针作为图形的节点,我需要覆盖str
def __str__(self):
return '%s %s'%(self.f_name,self.l_name)
它工作正常,而我只有英文字母。
但是我有带有 unicode 俄语字母的 Json 输入,我需要在图表上显示它们。有点像
Me = VkUser(111,u'\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440',u'\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440')
现在我遇到了错误
label=str(label) # this will cause "1" and 1 to be labeled the same
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
我在str中尝试了不同的变体
def str (self): return u'%s %s'%(self.f_name,self.l_name) 同样的错误
def __str__(self):
res = u'%s %s'%(self.f_name,self.l_name)
return res.encode('utf-8')
...
ValueError: matplotlib display text must have all code points < 128 or use Unicode strings
请帮助我,我对此感到厌倦。