nournina
Messages postés52Date d'inscriptiondimanche 27 octobre 2013StatutMembreDernière intervention17 juin 2014
-
Modifié par nournina le 13/05/2014 à 21:56
taz_iup
Messages postés179Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention21 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
YepoMax
Messages postés74Date d'inscriptionsamedi 8 décembre 2012StatutMembreDernière intervention14 juin 201420 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/
nournina
Messages postés52Date d'inscriptiondimanche 27 octobre 2013StatutMembreDernière intervention17 juin 20141 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
YepoMax
Messages postés74Date d'inscriptionsamedi 8 décembre 2012StatutMembreDernière intervention14 juin 201420 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 !
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.
--
15 mai 2014 à 23:34
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
16 mai 2014 à 02:11
Par contre, lors du
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 :