Téléchargement
illégal
Posez votre question Signaler

[python] entry accents... [Résolu]

Todesfall 66Messages postés 30 avril 2007Date d'inscription 2 septembre 2011Dernière intervention - Dernière réponse le 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
Lire la suite 

[python] entry accents »

11 réponses
Réponse
+4
moins plus
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:
http://sebsauvage.net/python/charsets_et_encoding.html

C'est la source de tes problèmes.
Ajouter un commentaire
Réponse
+0
moins plus
Tu utilises quoi comme tookit graphique ?

tkinter ?
wxWidgets ?
GTK ?
autre ?


Sinon, un article intéressant à lire: http://sebsauvage.net/python/charsets_et_encoding.html
Ajouter un commentaire
Réponse
+0
moins plus
J'utilise Tkinter.
Ajouter un commentaire
Réponse
+0
moins plus
Peux-tu faire un copier-coller du message d'erreur ?
Ajouter un commentaire
Réponse
+0
moins plus
Oui :

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8: ordinal not in range(128)
Ajouter un commentaire
Réponse
+0
moins plus
complet, avec les lignes de code et la pile d'appel, tel qu'à l'écran, s'il-te-plaît.
Ajouter un commentaire
Réponse
+0
moins plus
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)
Ajouter un commentaire
Réponse
+0
moins plus
en # -*- coding: iso-8859-1 -*-

on ne pas mettre quelque chose comme si dessus pour qu'il prenne les accents.
Ajouter un commentaire
Réponse
+0
moins plus
# -*- 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...)
Ajouter un commentaire
Réponse
+0
moins plus
merci
Ajouter un commentaire
Réponse
+0
moins plus
De rien !
Ajouter un commentaire
Ce document intitulé « [python] entry accents... » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?