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

nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 - Modifié par nournina le 13/05/2014 à 21:56
taz_iup Messages postés 179 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 21 mai 2014 - 21 mai 2014 à 17:41
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
A voir également:

2 réponses

YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
14 mai 2014 à 23:36
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/
1
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
15 mai 2014 à 23:34
merci pour votre idée mais quand je déclare la liste
listee = ['\u00e9','\u00e0']

ensuite je veut afficher la liste qui contienne les mots il m'affiche la partie qui contienne le à et é codé et moi je veut qu'il m'affiche le mot bien écrit
merci bien
0
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
16 mai 2014 à 02:11
Normalement, "\u00e9" devrait s'afficher "é" automatiquement, je ne comprend pas trop le problème.

Par contre, lors du

print listemot


vous aurez des caractères du style "\xc3\xa9" qui sont au fait des bytes.
Votre liste de mots contient des bytes parce que vous faites à chaque fois mot.encode("utf-8"), ce qui retourne des bytes et non une chaine de caractères !

Note au passage :
mot1 = mot.encode('utf-8')
listemot.append(mot1)   

# Peut s'écrire :
listemot.append( mot.encode('utf-8') )
0
Rejoignez-nous