Rechercher : dans
Par :

[python] entry accents...

Dernière réponse le 25 mai 2007 à 10:22:20 Todesfall, le 24 mai 2007 à 10:19:28 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [python] entry accents... » dans :
Supprimer les accents avec PHP VoirPour un tas de raisons, il est parfois utile de convertir un texte accentué en un texte sans accents. Voici une fonction permettant de transformer très simplement la quasi-totalité des accents en leur équivalent non-accentués : function...
Votre première application graphique avec Python et Glade VoirCe guide vous aidera à créer pas à pas votre première application graphique. Nous allons utiliser le langage de programme Python et l'API graphique GTK, en utilisant le logiciel Glade pour créer facilement les interfaces graphiques. C'est de la...
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...

1

sebsauvage, le 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

Todesfall, le 24 mai 2007 à 15:19:00

J'utilise Tkinter. @--ToDeSfAlL--@

Répondre à Todesfall

3

sebsauvage, le 24 mai 2007 à 16:07:18

Peux-tu faire un copier-coller du message d'erreur ?

Répondre à sebsauvage

4

Todesfall, le 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

sebsauvage, le 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

Todesfall, le 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

sebsauvage, le 24 mai 2007 à 17:11:42
  • +1

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

Todesfall, le 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

sebsauvage, le 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

Todesfall, le 25 mai 2007 à 09:14:11

Merci @--ToDeSfAlL--@

Répondre à Todesfall

11

 sebsauvage, le 25 mai 2007 à 10:22:20

De rien !

Répondre à sebsauvage