[python] entry accents...

Résolu
Todesfall Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai un souci avec python. Lorsque je rentre un accent dans un entry et que je récupère la valeur il me met une erreur du type code ascii il me semble.

Comment faire pour palier ce problème ?
En début de programme j'ai :
# -*- coding: iso-8859-1 -*-

Si quelqu'un n'a pas compris je peux lui ré-expliquer, ya pas de souci.

Merci d'avance

11 réponses

sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
fd.write('<des>Désignation produit : <produit>%s</produit></des>\n' % desProduit)

Ah !

Voilà le problème.

En quel encodage est ton fichier ?
ISO-8859-1 (jeu de caractère Windows), UTF-8, autre ?
Il faut impérativement encoder les chaînes.

Et tu devrais mettre toutes tes chaines en Unicode.
Ce qui donne:

machaine = u'<des>Désignation produit : <produit>%s</produit></des>\n' % desProduit
fd.write(machaine.encode('utf-8')



Si les mots encodage et jeu de caractère ne te parlent pas, il est impératif de lire ceci:
https://sebsauvage.net/python/charsets_et_encoding.html

C'est la source de tes problèmes.
5
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
Tu utilises quoi comme tookit graphique ?

tkinter ?
wxWidgets ?
GTK ?
autre ?


Sinon, un article intéressant à lire: https://sebsauvage.net/python/charsets_et_encoding.html
0
Todesfall Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
J'utilise Tkinter.
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
Peux-tu faire un copier-coller du message d'erreur ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Todesfall Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
Oui :

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8: ordinal not in range(128)
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
complet, avec les lignes de code et la pile d'appel, tel qu'à l'écran, s'il-te-plaît.
0
Todesfall Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\prog\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "D:\Data\Base_xml_python\dossier_machine.py", line 2912, in nouveau_Dossier
liste_equipement()
File "D:\Data\Base_xml_python\dossier_machine.py", line 222, in liste_equipement
fd.write('<des>Désignation produit : <produit>%s</produit></des>\n' % desProduit)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 6: ordinal not in range(128)
0
Todesfall Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
en # -*- coding: iso-8859-1 -*-

on ne pas mettre quelque chose comme si dessus pour qu'il prenne les accents.
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
# -*- coding: iso-8859-1 -*-

sert seulement à indiquer l'encodage de ton source.
Il faut indiquer à Python quel est l'encodage:
- des fichiers que tu lis
- des fichiers que tu écris

(Python ne peut pas le deviner, et par défaut il considèrera que c'est de l'ascii. Il refusera donc d'écrire "é" dedans, car "é" ne fait pas partie du code ascii, d'où l'erreur 'ascii' codec can't decode byte 0xe9...)


La règle c'est :

- toujours indiquer l'encodage du source .py (ce que tu as fait, c'est bien)
- toujours travailler en interne dans ton programme avec des chaînes unicode (u"bébé" au lieu de "bébé")
- quand on échange avec le monde extérieur (fichiers, réseau...) il faut encoder/décoder vers/depuis les bons charsets (ascii, iso-8859-1, utf-8...)
0
Todesfall Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
merci
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
De rien !
0