rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[python] entry accents...

Todesfall, le jeudi 24 mai 2007 à 10:19:28
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 @--ToDeSfAlL--@
Configuration: Windows XP
Internet Explorer 6.0
Répondre à Todesfall  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sebsauvage, le jeudi 24 mai 2007 à 14:34:47
Tu utilises quoi comme tookit graphique ?

tkinter ?
wxWidgets ?
GTK ?
autre ?


Sinon, un article intéressant à lire: http://sebsauvage.net/python/charsets_et_encoding.html
Répondre à sebsauvage

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Todesfall, le jeudi 24 mai 2007 à 15:19:00
J'utilise Tkinter. @--ToDeSfAlL--@
Répondre à Todesfall

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sebsauvage, le jeudi 24 mai 2007 à 16:07:18
Peux-tu faire un copier-coller du message d'erreur ?
Répondre à sebsauvage

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Todesfall, le jeudi 24 mai 2007 à 16:30:22
Oui :

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8: ordinal not in range(128) @--ToDeSfAlL--@
Répondre à Todesfall

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sebsauvage, le jeudi 24 mai 2007 à 16:32:37
complet, avec les lignes de code et la pile d'appel, tel qu'à l'écran, s'il-te-plaît.
Répondre à sebsauvage

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Todesfall, le jeudi 24 mai 2007 à 17:07:55
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) @--ToDeSfAlL--@
Répondre à Todesfall

7


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
sebsauvage, le jeudi 24 mai 2007 à 17:11:42
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.
Répondre à sebsauvage

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Todesfall, le vendredi 25 mai 2007 à 09:05:33
en # -*- coding: iso-8859-1 -*-

on ne pas mettre quelque chose comme si dessus pour qu'il prenne les accents. @--ToDeSfAlL--@
Répondre à Todesfall

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sebsauvage, le vendredi 25 mai 2007 à 09:13:18
# -*- 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...)
Répondre à sebsauvage

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Todesfall, le vendredi 25 mai 2007 à 09:14:11
merci @--ToDeSfAlL--@
Répondre à Todesfall

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 sebsauvage, le vendredi 25 mai 2007 à 10:22:20
De rien !
Répondre à sebsauvage
Logiciels pertinents trouvés dans les téléchargements
Télécharger PSPad 4.5.2PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,...Catégorie: Développement
Licence: Freeware/gratuit
Télécharger Notepad++ 5.0.3Notepad++ - Notepad++ est un editeur de code source qui supporte plusieurs langages. Il s'agit d'un logiciel libre performant et...Catégorie: Développement
Licence: Open Source
Télécharger Bank Perfect 6.23Bank Perfect - BankPerfect est un programme de gestion bancaire totalement gratuit destiné aux particuliers soucieux de tenir leurs...Catégorie: Budget
Licence: Freeware/gratuit
Télécharger CDCheck  3.1.13.0CDCheck - Récupérez vos fichiers endommagèes d'un cd ou DVD grâce à CDCheck... CDCheck est l'utilité de la prévention, de détection...Catégorie: Gestion de fichiers
Licence: Shareware
Plus de logiciels gratuits sur « [python] entry accents... »