[Python] accents avec wxPython - utf8 ?

Résolu/Fermé
MyDomDom Messages postés 7 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 11 juillet 2007 - 1 juin 2007 à 16:28
 yeahyeah - 15 juil. 2009 à 19:25
Bonjour,

Je ne suis qu'un modeste amateur de python et wxpython, avec de grosses lacunes...
Malgré mes recherches sur le net et mes tentatives de codages (très) nombreuses, je ne parviens pas à TOUJOURS faire apparaitre correctement les accents sur mon appli écrite en wxpython.
J'ai bien lu le tuto de sebsauvage et bien d'autres mais ça ne passe pas toujours, notamment à l'intérieur de certains controles de wx (problèmes que j'ai du mal à reproduire).
Je précise que je suis sous Mac OS X (ou Win XP), python 2.5.1, wxpython 2.8.4.0 Unicode pour py2.5.

Je mets #-*- coding: utf-8 -*- au début de chaque fichier et un u devant les "".
Est-ce bien comme cela qu'il faut que je fasse ?

Merci d'avance
Dominique

4 réponses

sebsauvage Messages postés 32844 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 647
1 juin 2007 à 17:16
Est-ce bien comme cela qu'il faut que je fasse ?

Tout à fait !

C'est très bien d'utiliser Unicode de bout en bout dans tes développements.

NB: Le source n'a pas à être obligatoirement en utf-8. Perso je met mes sources en iso-8859-1.



Sous MacOS X je ne sais pas, mais je n'ai aucun problème pour afficher les accents sous Windows (XP) et Linux (Ubuntu 7.04);

Si je prend l'appli d'exemple https://www.sebsauvage.net/python/gui/simpleapp_wx.py
Je peux entrer des accents, et ils sont correctement affichés dans le label.

Est-ce que les accents s'affichent aussi correctement chez toi avec ce programme ?



Note: il n'est pas impossible que certains widgets de wxPython ne gèrent pas correctement l'Unicode.
2
MyDomDom Messages postés 7 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 11 juillet 2007
1 juin 2007 à 18:47
Seb,
Je te dirai lundi (le mac est au boulot!). Chez moi, sous XP, tout passe.
Merci de ta réponse, rapide en plus, et de toutes tes pages web.
Je suis sûr que plein de gens comme moi s'en servent régulièrement, sans jamais un merci.
Alors merci de faire profiter les autres de tes bons conseils.
Quand on apprend tout seul comme je l'ai fait, heureusement qu'il y a des gens comme toi pour aider parce que j'en ai passé des heures à ramer....
J'arrête le cirage, on va croire que c'est toi qui fait les questions et les réponses.... Mais c'est sincère.

Je reviens lundi pour conclure sur cette discussion
Merci
Dominique
0
sebsauvage Messages postés 32844 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 647
1 juin 2007 à 20:09
:-)

De rien.



Je suis sûr que plein de gens comme moi s'en servent régulièrement, sans jamais un merci.

Les quelques mercis qu'on reçoit compensent ceux qui manquent :-)
0
MyDomDom Messages postés 7 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 11 juillet 2007
4 juin 2007 à 15:15
Seb / Tous,

C'est ok. Ca marche aussi sur mac.
Je n'ai plus (pour l'instant du moins) de différence de rendu pc mac.

Conclusion pour ceux qui auraient à gérer les accents:

1/On code le fichier en iso8859-1 ou utf8 sur 1 des 2 premières lignes:
# -*- coding: utf-8 -*-

2/ On gère TOUTES les strings avec un u devant pour éviter les conflits:
maStringUnicode=u" ceci est un test: éèàç"

3/ Quand on a à utiliser des vraies strings non unicodes (par ex pour des "".join() ...), on prend la string unicode et on la recode en ascii:
maStringAscii=maStringUnicode.encode('iso-8859-1')

4/ On la remet en unicode avec:
maStringUnicode=maStringAscii.decode('iso-8859-1')

Voilà.
Pas dur, mais quand on ne sait pas, ce n'est pas facile

Grand Merci à Seb
Dominique
0
MyDomDom Messages postés 7 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 11 juillet 2007
4 juin 2007 à 15:45
Petit code au cas où:
# -*- coding: utf-8 -*-

maStringUnicode=u'Ceci est un test: é è à ç § & '
print maStringUnicode, type(maStringUnicode)

maStringAscii=maStringUnicode.encode('iso-8859-1')
print maStringAscii, type(maStringAscii)

maStringUnicode=maStringAscii.decode('iso-8859-1')
print maStringUnicode, type(maStringUnicode)

# Si on a un int
monInt=5
print monInt,type(monInt)
print 'Est-ce un int ? ',isinstance(monInt,int)
monInt=str(monInt).decode('iso-8859-1')
print 'Est-ce encore un int ? ',isinstance(monInt,int), '.C\'est un ',type(monInt)


Ciao
Dominique
0
yeahyeah > MyDomDom Messages postés 7 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 11 juillet 2007
15 juil. 2009 à 19:25
merci merci merci
0
sebsauvage Messages postés 32844 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 647
4 juin 2007 à 23:10
Merci du retour.
0