[python] entry accents...

Résolu/Fermé
Todesfall Messages postés 70 Date d'inscription lundi 30 avril 2007 Statut Membre Dernière intervention 17 septembre 2014 - 24 mai 2007 à 10:19
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 25 mai 2007 à 10:22
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mai 2007 à 17:11
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mai 2007 à 14:34
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 lundi 30 avril 2007 Statut Membre Dernière intervention 17 septembre 2014
24 mai 2007 à 15:19
J'utilise Tkinter.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mai 2007 à 16:07
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 lundi 30 avril 2007 Statut Membre Dernière intervention 17 septembre 2014
24 mai 2007 à 16:30
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mai 2007 à 16:32
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 lundi 30 avril 2007 Statut Membre Dernière intervention 17 septembre 2014
24 mai 2007 à 17:07
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 lundi 30 avril 2007 Statut Membre Dernière intervention 17 septembre 2014
25 mai 2007 à 09:05
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
25 mai 2007 à 09:13
# -*- 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 lundi 30 avril 2007 Statut Membre Dernière intervention 17 septembre 2014
25 mai 2007 à 09:14
merci
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
25 mai 2007 à 10:22
De rien !
0