Problème d'encodage de caractères spéciaux

Signaler
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
-
taz_iup
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
-
bonjour ,
je fait une boucle qui lire une chaine de caractère ensuite fait des changement selon le caractère voici le code:
#! /usr/bin/ python
# -*- coding: utf-8 -*-
# -*- coding:cp1256 -*-
import string 
import sys
listea = ['b','c']
listeb = ['a','c']
listec = ['a','b']
listee = ['é','è','à']
listemot = [ ]
mot = None
mot1 = None
mot1 = mot.encode('utf-8') 
for i in range(len(mot1)) :
      mot1 = mot
      if mot[i] == 'a':
           for j in range(len(listea)) :
                mot = mot[:i] + listea[j] + mot[i+1:]
                mot1 = mot.encode('utf-8')
                listemot.append(mot1)
      elif mot[i] == 'b':
           for j in range(len(listeb)) :
                mot = mot[:i] + listeb[j] + mot[i+1:]
                mot1 = mot.encode('utf-8')
                listemot.append(mot1)
       elif mot[i] == 'c':
           for j in range(len(listec)) :
               mot = mot[:i] + listec[j] + mot[i+1:]
               mot1 = mot.encode('utf-8')
               listemot.append(mot1)    
       elif mot[i] == 'e':
           for j in range(len(listee)) :
               mot = mot[:i] + listee[j] + mot[i+1:]
               mot1 = mot.encode('utf-8')
               listemot.append(mot1)      
print listemot 


le problème c'est l'encadage de caractère é ,è ,à il m'affiche des chinois.
s'il vous plait si vous pouvez m'aidez à résoudre mon problème
merci bien

2 réponses

Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
14
YepoMax - 14 mai 2014 à 23:33
Je vous conseille dans ce cas de convertir tous vos caractères spéciaux en UNICODE.

Au lieu de "é", utilisez "\u00e9" et au lieu de "à", utilisez "\u00e0".
"\u" indique que les caractères qui suivent sont une référence UNICODE - "\u00e9" est une chaine de caractère de longueur 1 (comme "é") !!
Pour d'autres codes UNICODE, utilisez "\u" suivi du code correspondant que vous trouverez ici : http://unicode-table.com/
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1
merci bien monsieur
mais il reste toujour le meme problème de caractère "é" et "à"
quand j'écrit un mot contient un "é" il ne fait du changement au fichier résultat et quand je fait print(listemot) à la place de é il écrit " \xc3\xa9 "
YepoMax
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
14
Je n'ai pas du tout ce problème ! Vous utilisez bien la fonction open en mode "rt" et "wt" ?
Vous avez retiré le .encode("utf-8") que vous utilisiez et qui n'était pas nécessaire ?
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1
je suis débutante en python j'ai toujours ce genre de problème et je sais pas comment résolus, je développe sous linux Ubuntu 13.10 et python 2.7
YepoMax
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
14
Si vous utilisez mon code exactement comme je vous l'ai donné et que vous avez cette erreur, vérifiez l'encodage de votre éditeur texte !
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1
je fait votre code exactement comme vous avez donné et j'ai fait régler l'encodage d'éditeur (utf-8)dés le début
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014

1) Il y a deux façon de convertir un objet en string : str et repr

Lorsque tu fais print sur un objet list, c'est repr qui est utilisé ainsi que pour les objets contenus dans la liste.

dans une console python tu peux regarder les différents résultats obtenus par

print str('é')
print repr('é')
print str(u'é')
print repr(u'é')

2) l'encodage par défaut de python l'ascii, ce qui peut te donner des erreurs de ce genre :

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)

Il faut définir l'encodage par défaut avec un sys.setdefaultencoding et il y a beaucoup de lecture sur le sujet dans google ou bien transformer ton unicode en string avec un .encode.
--