Problème d'encodage lors d'un join.

Problème d'encodage lors d'un join. - Python - Programmation

Marsh Posté le 08-11-2008 à 11:43:02    

Bonjour,
 
J'ai un problème d'encodage lors de la transformation d'un tableau en un string grâce à un join() et je sais pas comment utiliser les encode() decode() pour régler ce problème. Voici le parcours du tableau:
1. J'ouvre un fichier:

Code :
  1. try:
  2.  fileHTML = open(path,'r+') #on ouvre le fichier
  3.  page = fileHTML.read().decode(fichierEncodage) #on décode ce que contient le fichier pour que le python sache comment interprété les caractères non ASCII
  4. except IOError, message: #erreur lors de l'ouverture
  5.  print >> sys.stderr, 'File could not be opened:', message
  6.  raw_input('Appuyez sur une touche...\n')
  7.  sys.exit(1)


2. Ici je recherche un élément dans le fichier grâce à une expression régulière stockée dans elt.expr_rech

Code :
  1. for elt in elt_rech: #pour chaque élémént à rechercher,
  2.  result=elt.expr_rech.findall(page) #on le recherche grâce à son expression régulière,
  3.  if result: #et si il existe,
  4.   elt.result = result #on le stock dans le champ résultat de la classe exprReg


3. J'ajoute ensuite une string (contenant mon résultat précédent) dans un tableau  

Code :
  1. s.append('\t\t<%s>%s</%s>\n'%(elt.obj_rech,clean_elt(elt.result[i]),elt.obj_rech)) #on ajoute le résultat


4.Après plusieurs ajout, je join le tableau

Code :
  1. result_str = u''.join(s)


 
Je n'avais jusqu'ici aucun problème jusqu'à ce que le symbole € apparaisse dans une des string du tableau. Depuis j'ai comme erreur:

Code :
  1. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 11: ordinal
  2. not in range(128)


 
J'ai essayé de jouer avec les encode() decode() mais je n'arrive as à bien les positionner pour faire le join.
 
J'arrive à afficher la variable page sans problème avec le code

Code :
  1. page.encode(fichierEncodage)

donc je suppose qu'il y a moyen d'afficher le symbole posant problème dans le tableau.
 
Merci pour votre aide!!


Message édité par Shadew le 08-11-2008 à 11:43:50
Reply

Marsh Posté le 08-11-2008 à 11:43:02   

Reply

Marsh Posté le 08-11-2008 à 11:51:22    

phase 3, utilises un unicode (préfixe le string dans append avec u) et vois ce que ça donne.

 

Accessoirement, tu pourrais aussi utiliser une des libs XML fournies dans la distro standard pour créer ta sortie, au lieu de fabrique du XML à la main comme ça.


Message édité par masklinn le 08-11-2008 à 11:52:28

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-11-2008 à 12:00:24    

Tu es mon dieu :')

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed