OVH Cloud OVH Cloud

wxPython et encodage sous linux

9 réponses
Avatar
Christophe Attias
Bonjour,

C'est mon premier post sur ce newsgroup (peut-être d'une longue
série...), je me présente donc rapidement:
Je suis chargé de réaliser un programme de gestion des adhérents d'une
association.
Pour réaliser ce travail j'ai choisi python associé à wxwidget pour la
partie graphique et sqlite pour la base de données pour assurer au
logiciel un portage sous linux, mac et windows et respecter la licence GPL.
La seconde raison de ce choix, c'est la volonté de me former à ce
langage pour participer à un projet de logiciel pédagogique libre qui me
tient très à coeur (Le Terrier sous AbulEdu).
J'avoue avoir un peu de mal à bien assimiler les finesses syntaxiques de
ce superbes langage pour le moment (en particulier le module wxPython
pour lequel j'ai du mal à trouver une doc "à mon goût")... Mais je ne
désespère pas.

J'en viens donc à ma question :
La première partie de mon boulot consiste à récupérer les données à
partie de fichiers dbase et les organiser dans une base gérée par
sqlite. Ça marche, mais lorsque j'affiche les enregistrements d'une
table dans un interface graphique (wxGrid) l'appli plante sous linux à
cause des caractères accentués... Elle tourne parfaitement sous windows
XP et cela me contrarie beaucoup :-) surtout que je ne trouve pas
l'origine de ce problème (qui vient du module wxPython).

Merci pour votre aide
Chris

9 réponses

Avatar
Jacques Pronchery
Bonjour,

C'est mon premier post sur ce newsgroup (peut-être d'une longue
série...), je me présente donc rapidement:
Je suis chargé de réaliser un programme de gestion des adhérents d'une
association.
Pour réaliser ce travail j'ai choisi python associé à wxwidget pour la
partie graphique et sqlite pour la base de données pour assurer au
logiciel un portage sous linux, mac et windows et respecter la licence GPL.
La seconde raison de ce choix, c'est la volonté de me former à ce
langage pour participer à un projet de logiciel pédagogique libre qui me
tient très à coeur (Le Terrier sous AbulEdu).
J'avoue avoir un peu de mal à bien assimiler les finesses syntaxiques de
ce superbes langage pour le moment (en particulier le module wxPython
pour lequel j'ai du mal à trouver une doc "à mon goût")... Mais je ne
désespère pas.

J'en viens donc à ma question :
La première partie de mon boulot consiste à récupérer les données à
partie de fichiers dbase et les organiser dans une base gérée par
sqlite. Ça marche, mais lorsque j'affiche les enregistrements d'une
table dans un interface graphique (wxGrid) l'appli plante sous linux à
cause des caractères accentués... Elle tourne parfaitement sous windows
XP et cela me contrarie beaucoup :-) surtout que je ne trouve pas
l'origine de ce problème (qui vient du module wxPython).

Merci pour votre aide
Chris


Bonjour,

as-tu essayé de mettre :

# -*- coding: iso-8859-15 -*-

au début des fichiers de tes modules.

Jacques..

Avatar
mutah
Bonjour,

quelle version de wxPython utilisez-vous ?

pour les 2.5.2.X, il y a des paquets compilés pour GTK2+Unicode : c'est
celui-ci qu'il faut pour permettre les accents, à condition d'avoir
affecté les paramètres de localisation correctement :

- dans l'environnement d'éxécution cad les variables du shell LANG,
LC_ALL..)

- au sein de l'application via le module sys et les fonctions
setdefaultencoding et setappdefaultencoding.

unicode est complexe au premier abord, mais la lecture de quelques docs,
comme http://www.opendocspublishing.com/pyqt/index.lxp?lxpwrap=x2183.htm
peut vous éclairer plus sur le sujet.

Bon courage,

François

Christophe Attias wrote:
Bonjour,

C'est mon premier post sur ce newsgroup (peut-être d'une longue
série...), je me présente donc rapidement:
Je suis chargé de réaliser un programme de gestion des adhérents d'une
association.
Pour réaliser ce travail j'ai choisi python associé à wxwidget pour la
partie graphique et sqlite pour la base de données pour assurer au
logiciel un portage sous linux, mac et windows et respecter la licence GPL.
La seconde raison de ce choix, c'est la volonté de me former à ce
langage pour participer à un projet de logiciel pédagogique libre qui me
tient très à coeur (Le Terrier sous AbulEdu).
J'avoue avoir un peu de mal à bien assimiler les finesses syntaxiques de
ce superbes langage pour le moment (en particulier le module wxPython
pour lequel j'ai du mal à trouver une doc "à mon goût")... Mais je ne
désespère pas.

J'en viens donc à ma question :
La première partie de mon boulot consiste à récupérer les données à
partie de fichiers dbase et les organiser dans une base gérée par
sqlite. Ça marche, mais lorsque j'affiche les enregistrements d'une
table dans un interface graphique (wxGrid) l'appli plante sous linux à
cause des caractères accentués... Elle tourne parfaitement sous windows
XP et cela me contrarie beaucoup :-) surtout que je ne trouve pas
l'origine de ce problème (qui vient du module wxPython).

Merci pour votre aide
Chris


Avatar
Tibi
mutah wrote:

- au sein de l'application via le module sys et les fonctions
setdefaultencoding et setappdefaultencoding.


Ca a l'air intéressant, où trouves-tu cette fonction setappdefaultencoding ?

Avatar
Christophe Attias
Bonjour,

quelle version de wxPython utilisez-vous ?

pour les 2.5.2.X, il y a des paquets compilés pour GTK2+Unicode : c'est
celui-ci qu'il faut pour permettre les accents, à condition d'avoir
affecté les paramètres de localisation correctement :

- dans l'environnement d'éxécution cad les variables du shell LANG,
LC_ALL..)

- au sein de l'application via le module sys et les fonctions
setdefaultencoding et setappdefaultencoding.

unicode est complexe au premier abord, mais la lecture de quelques docs,
comme http://www.opendocspublishing.com/pyqt/index.lxp?lxpwrap=x2183.htm
peut vous éclairer plus sur le sujet.

Bon courage,


C'est un pb de paquetage effectivement :
Je suis sous Mdk 10.1 avec wxPython 2.5.2.7 (fournie dans la distrib),
je n'ai pas pu installer la version 2.5.2.8 du wxpython.org pour des pbs
de librairie... Je suis donc revenu à la version 2.4.1.2 de la mdk 9.2
et ça marche très bien maintenant.

Je pense réinstaller le tout à partir des sources dans les prochains
jours pour vérifier.

Merci beaucoup
Chris

Avatar
François
Tibi wrote:
mutah wrote:


- au sein de l'application via le module sys et les fonctions
setdefaultencoding et setappdefaultencoding.



Ca a l'air intéressant, où trouves-tu cette fonction setappdefaultencoding ?



dans le module sys :o)

cette doc est pas mal, et de plus en français :

http://lionel.grolleau.free.fr/python/python.html


Avatar
Tibi
François wrote:

Ca a l'air intéressant, où trouves-tu cette fonction
setappdefaultencoding ?


dans le module sys :o)


C'est bien vrai !!
Ce qui est étonnant et qui m'avait fait poser la question est que cette
fonction n'est pas dans la doc de référence:
http://python.org/doc/2.3.4/lib/module-sys.html

Pourtant elle existe et fonctionne:

Python 2.3.4 (#2, Aug 29 2004, 02:04:10)
[GCC 3.3.4 (Debian 1:3.3.4-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
unicode('é')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0:
ordinal not in range(128)
import sys
sys.setappdefaultencoding('latin1')
unicode('é')
u'xe9'






Avatar
Vincent Bernat
OoO En ce début de soirée du samedi 09 octobre 2004, vers 21:58, Tibi
disait:

Python 2.3.4 (#2, Aug 29 2004, 02:04:10)
[GCC 3.3.4 (Debian 1:3.3.4-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
unicode('é')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0:
ordinal not in range(128)
import sys
sys.setappdefaultencoding('latin1')
unicode('é')
u'xe9'





C'est curieux car cette fonction est normalement effacée lors de
l'initialisation de python, la rendant alors inaccessible, sauf à
faire un sitecustomize.py.
--
Localise input and output in subroutines.
- The Elements of Programming Style (Kernighan & Plaugher)




Avatar
Tibi
On Mon, 11 Oct 2004 11:36:52 +0200, Vincent Bernat
wrote:

OoO En ce début de soirée du samedi 09 octobre 2004, vers 21:58, Tibi
disait:

Python 2.3.4 (#2, Aug 29 2004, 02:04:10)
[GCC 3.3.4 (Debian 1:3.3.4-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
unicode('é')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0:
ordinal not in range(128)
import sys
sys.setappdefaultencoding('latin1')
unicode('é')
u'xe9'





C'est curieux car cette fonction est normalement effacée lors de
l'initialisation de python, la rendant alors inaccessible, sauf à
faire un sitecustomize.py.


Non, c'est setdefaultencoding qui est effacée, cette fonction est
documentée.
Mais setappdefaultencoding n'est ni effacée ni documentée... mais
bien pratique !





Avatar
Tibi
On Sat, 09 Oct 2004 21:58:19 +0200, Tibi wrote:

Ca a l'air intéressant, où trouves-tu cette fonction
setappdefaultencoding ?



Ce qui est étonnant et qui m'avait fait poser la question est que cette
fonction n'est pas dans la doc de référence:
http://python.org/doc/2.3.4/lib/module-sys.html

Pourtant elle existe et fonctionne:

import sys
sys.setappdefaultencoding('latin1')
unicode('é')
u'xe9'






Alors en fait il semblerait que cette fonction soit définie par le site.py
du paquet Debian Python, mais on ne peut pas compter sur son existence sur
tous les systèmes. Par exemple sous Windows, avec la même version de
Python cette fonction n'est pas disponible.