J'utilise BeautifulSoup pour extraire du texte à partir d'un code HTML, mais je n'arrive pas à comprendre comment l'imprimer correctement à l'écran (ou dans un fichier d'ailleurs).
Voici à quoi ressemble ma classe contenant le texte:
class Thread(object):
def __init__(self, title, author, date, content = u""):
self.title = title
self.author = author
self.date = date
self.content = content
self.replies = []
def __unicode__(self):
s = u""
for k, v in self.__dict__.items():
s += u"%s = %s " % (k, v)
return s
def __repr__(self):
return repr(unicode(self))
__str__ = __repr__
Lorsque vous essayez d'imprimer une instance de Thread
, voici ce que je vois sur la console:
~/python-tests $ python test.py
u'date = 21:01 03/02/11 content = author = \u05d3"\u05e8 \u05d9\u05d5\u05e0\u05d9 \u05e1\u05d8\u05d0\u05e0\u05e6\'\u05e1\u05e7\u05d5 replies = [] title = \u05de\u05d1\u05e0\u05d4 \u05d4\u05de\u05d1\u05d7\u05df '
Quoi que j'essaye, je ne peux pas obtenir la sortie que j'aimerais (le texte ci-dessus doit être en hébreu). Mon objectif final est de sérialiser Thread
dans un fichier (en utilisant json ou pickle) et de pouvoir le relire.
J'exécute cela avec Python 2.6.6 sur Ubuntu 10.10.
Pour sortir une chaîne Unicode dans un fichier (ou la console), vous devez choisir un encodage de texte. Dans Python le codage de texte par défaut est ASCII, mais pour prendre en charge les caractères hébreux, vous devez utiliser un codage différent, tel que UTF-8:
s = unicode(your_object).encode('utf8')
f.write(s)
Une alternative intéressante à la réponse de @ mark consiste à définir la variable d'environnement PYTHONIOENCODING=UTF-8
.
c.f . Ecriture de chaînes unicode via sys.stdout en Python .
(Assurez-vous de le définir avant de démarrer Python pas dans le script.)