OVH Cloud OVH Cloud

encodage et décodage avec python

6 réponses
Avatar
mirkof
Bonjour,

j'utilise Python 2.3.5 sur linux

Je récupère un chaine de caractère d'une base de donnée mysql. certain
caratères sont accentué et codé de la sorte : \xe8 pour è \xe9 pour é etc
Il semble que cela soit de l'encodage iso-8859-1.


Comment faire pour qu'il sorte bien sur mon terminal, ou dans un fichier
texte.

Merci.

6 réponses

Avatar
Jonathan Barnoud
Bonjour,

j'utilise Python 2.3.5 sur linux

Je récupère un chaine de caractère d'une base de donnée mysql. certain
caratères sont accentué et codé de la sorte : xe8 pour è xe9 pour é etc
Il semble que cela soit de l'encodage iso-8859-1.


Comment faire pour qu'il sorte bien sur mon terminal, ou dans un fichier
texte.

Merci.


À vue de nez je parierais plutôt pour de l'UTF-8.
D'autant plus que ces chaines viennent de MySQL.

Pour s'en convaincre, tape :
print u"xe8xe9"

Vous devriez obtenir èé ! Chouette !

Bon, maintenant, dans la mesure où j'écris mes scripts directement en
utf-8 et que mon terminal est en utf-8 je ne sais plus comment convertir
les chaines utf-8 en autre chose mais il y a une page sur le wiki.

Jonathan Barnoud

PS : J'y pense : dans la mesure où vous êtes sous linux il est probable
que votre éditeur soit en utf-8, il serais intéressant pour vous de
savoir quelles sont vos locales systeme et quel encodage votre éditeur
utilise.

Avatar
Eric Brunel
On Fri, 04 Nov 2005 07:36:19 +0100, Jonathan Barnoud wrote:

Bonjour,

j'utilise Python 2.3.5 sur linux

Je récupère un chaine de caractère d'une base de donnée mysql. certain
caratères sont accentué et codé de la sorte : xe8 pour è xe9 pour é etc
Il semble que cela soit de l'encodage iso-8859-1.


Comment faire pour qu'il sorte bien sur mon terminal, ou dans un fichier
texte.

Merci.


À vue de nez je parierais plutôt pour de l'UTF-8.


Non: en UTF-8, tous les caractères non-ASCII sont codés sur au moins 2 octets, donc aucune chance que ce soit ça.

Pour s'en convaincre, tape :
print u"xe8xe9"


Non plus: si tu tapes ça dans un terminal, ça va (sans doute - je ne suis pas sûr d'avoir bien compris) se baser sur ton encodage par défaut. Si cet encodage est ASCII, voilà ce que ça fait:

print u'éè'
Traceback (most recent call last):



File "<stdin>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)

Vous devriez obtenir èé ! Chouette !


Ca, ça prouve seulement que l'encodage par défaut contient les caractères é et è, pas que c'est de l'UTF-8...

Bon, maintenant, dans la mesure où j'écris mes scripts directement en
utf-8 et que mon terminal est en utf-8 je ne sais plus comment convertir
les chaines utf-8 en autre chose mais il y a une page sur le wiki.


On fait comme ça (en Python 2.1 en tous cas):

s = unicode('xe8 xe9', 'iso8859-1')
s.encode('utf-8')
'xc3xa8 xc3xa9'




Jonathan Barnoud

PS : J'y pense : dans la mesure où vous êtes sous linux il est probable
que votre éditeur soit en utf-8, il serais intéressant pour vous de
savoir quelles sont vos locales systeme et quel encodage votre éditeur
utilise.


La plupart des éditeurs que je connais sous Linux n'utilisent pas l'encodage UTF-8 par défaut, mais plutôt le latin-1. Tu es sûr de ton coup, là?
--
python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17;8(%,5.Z65'*9--56l7+-'])"



Avatar
Encolpe Degoute
Bonjour,

j'utilise Python 2.3.5 sur linux

Je récupère un chaine de caractère d'une base de donnée mysql. certain
caratères sont accentué et codé de la sorte : xe8 pour è xe9 pour é etc
Il semble que cela soit de l'encodage iso-8859-1.


Comment faire pour qu'il sorte bien sur mon terminal, ou dans un fichier
texte.


Pour un terminal il faut connaître l'encodage du dis terminal, pour le
fichier, cela dépend de l'application qui lit :)

Pour la pratique: chaine.decode('utf8').encode('iso8859-15')
ça marche avec tout les encodages d'entrée et de sortie.

Cordialement,
--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales

Avatar
Jonathan Barnoud

PS : J'y pense : dans la mesure où vous êtes sous linux il est probable
que votre éditeur soit en utf-8, il serais intéressant pour vous de
savoir quelles sont vos locales systeme et quel encodage votre éditeur
utilise.



La plupart des éditeurs que je connais sous Linux n'utilisent pas
l'encodage UTF-8 par défaut, mais plutôt le latin-1. Tu es sûr de ton
coup, là?


Dans les distribution grand public récente c'est en tout cas souvent le
cas : mon ubuntu est par défaut en utf-8 de même que toutes les
applications qui sont installée dessus. Il en allait de même avec ma Fedora.

Maintenant, il ne me semble pas que ce soit le cas pour une gentoo (pas
par défaut en tout cas) et je ne sais pas pour les autres distributions...


Avatar
Laurent Pointal
Jonathan Barnoud wrote:

mais il y a une page sur le wiki.


Ici: http://wikipython.flibuste.net/moin.py/JouerAvecUnicode

Avatar
Yves Lange
Bonjour,

j'utilise Python 2.3.5 sur linux

Je récupère un chaine de caractère d'une base de donnée mysql. certain
caratères sont accentué et codé de la sorte : xe8 pour è xe9 pour é etc
Il semble que cela soit de l'encodage iso-8859-1.


Comment faire pour qu'il sorte bien sur mon terminal, ou dans un fichier
texte.

Merci.
Il existe un module PrintISO qui permet l'affichage directe de caractère

accentué.
Recherche sur google.com ;)