Comment faire pour revenir __repr__ chaîne unicode
Question
J'appelle une fonction __repr__()
sur x
objet comme suit:
val = x.__repr__()
et je veux stocker la chaîne de val
à base de données SQLite
. Le problème est
que val
devrait être unicode.
J'ai essayé sans succès:
val = x.__repr__().encode("utf-8")
et
val = unicode(x.__repr__())
Savez-vous comment corriger cela?
J'utilise Python 2.7.2
La solution
repr(x).decode("utf-8")
et unicode(repr(x), "utf-8")
doivent travailler.
Autres conseils
La représentation d'un objet ne doit pas être Unicode. Définir la méthode de __unicode__
et passer l'objet à unicode()
.
J'avais un problème similaire, parce que je tirais le texte sur une liste à l'aide rééd.
b =['text\xe2\x84\xa2', 'text2'] ## \xe2\x84\xa2 is the TM symbol
a = repr(b[0])
c = unicode(a, "utf-8")
print c
>>>
'text\xe2\x84\xa2'
J'ai finalement essayé JOIN pour obtenir le texte de la liste à la place
b =['text\xe2\x84\xa2', 'text2'] ## \xe2\x84\xa2 is the TM symbol
a = ''.join(b[0])
c = unicode(a, "utf-8")
print c
>>>
text™
Maintenant, il fonctionne !!!!
J'ai essayé plusieurs façons différentes. Chaque fois que j'utilisé rééd avec la fonction unicode cela n'a pas fonctionné. Je dois utiliser ou se joindre à déclarer le texte comme dans la variable e ci-dessous.
b =['text\xe2\x84\xa2', 'text2'] ## \xe2\x84\xa2 is the TM symbol
a = ''.join(b[0])
c = unicode(repr(a), "utf-8")
d = repr(a).decode("utf-8")
e = "text\xe2\x84\xa2"
f = unicode(e, "utf-8")
g = unicode(repr(e), "utf-8")
h = repr(e).decode("utf-8")
i = unicode(a, "utf-8")
j = unicode(''.join(e), "utf-8")
print c
print d
print e
print f
print g
print h
print i
print j
*** Remote Interpreter Reinitialized ***
>>>
'text\xe2\x84\xa2'
'text\xe2\x84\xa2'
textâ„¢
text™
'text\xe2\x84\xa2'
'text\xe2\x84\xa2'
text™
text™
>>>
Hope this helps.
Dans python2, vous pouvez définir deux méthodes:
#!/usr/bin/env python
# coding: utf-8
class Person(object):
def __init__(self, name):
self.name = name
def __unicode__(self):
return u"Person info <name={0}>".format(self.name)
def __repr__(self):
return self.__unicode__().encode('utf-8')
if __name__ == '__main__':
A = Person(u"皮特")
print A
Dans python3, il suffit de définir __repr__
sera ok:
#!/usr/bin/env python
# coding: utf-8
class Person(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return u"Person info <name={0}>".format(self.name)
if __name__ == '__main__':
A = Person(u"皮特")
print(A)