IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

utf8 et wxPython


Sujet :

wxPython

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut utf8 et wxPython
    Bonjour à tous, voici mon problème:

    Je code un petit programme avec Python + wxWidgets, le tout en utf8. Tout fonctionne bien pour les chaînes codées "en dur" dans ma source, genre u'Veuillez entrer machin' mais dès que je veux récupérer une entrée de l'utilisateur, en particulier dans un TextCtrl, j'ai des exceptions du genre lancées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 2: ordinal not in range(128)
    Y-a-t-il une parade pour encoder l'entrée en utf8 ou un truc du genre?

    Petite précision: j'ai bien 'encoding utf8' comme entête et mon fichier source est bien sauvé en utf8.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Tu es sous quel OS ?

    L'exemple suivant fonctionne indifféremment sous windows XP et sous linux ubuntu.

    Le fichier .py doit bien entendu être sauvegardé en format utf-8

    Si tu tapes un texte accentué dans le contrôle texte et que tu cliques sur le bouton, le texte s'affiche en titre de la fenêtre sans problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import wx
     
    class MaFenetre(wx.Frame):
    	def __init__(self, titre):
    		wx.Frame.__init__(self, None, -1, title = titre)
    		panneau = Panneau(self)
    		self.Fit()
     
    class Panneau(wx.Panel):
    	def __init__(self, parent):
    		wx.Panel.__init__(self, parent, -1)
    		sizer = wx.BoxSizer(wx.VERTICAL)
    		self.texte = wx.TextCtrl(self, size = (300, -1))
    		sizer.Add(self.texte, 0, wx.ALL, 10)
    		bouton = wx.Button(self, -1, "Enregistrer")
    		sizer.Add(bouton, 0, wx.ALL, 10)
    		self.SetSizer(sizer)
    		self.Fit()
    		self.SetAutoLayout(True)
    		self.Bind(wx.EVT_BUTTON, self.OnClick, bouton)
     
    	def OnClick(self, event):
    		self.GetParent().SetTitle(self.texte.GetValue())
     
    class TestApp(wx.App):
    	def OnInit(self):
    		f = MaFenetre("Ma Fenêtre")
    		f.Show(True)
    		self.SetTopWindow(f)
    		return True
     
    app = TestApp()
    app.MainLoop()

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    Merci de ta réponse. Je suis sous Debian Sid et Ubuntu. J'inspecte ce code...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    Rebonsoir,

    Alors, après mures bidouilles et recherches sur ton code et le mien, j'ai fini par identifier la provenance de l'erreur. Avant d'utiliser la chaîne entrée dans le TextCtrl, je lui appliquait un str(), qui j'en conclus ne gère pas l'utf8, ce qui est logique dans le fond vu qu'il n'y a pas assez "d'espace" dans une variable char pour stocker un caractère unicode (comme le confirme le fameux message d'erreur).

    Merci bien, et merci aussi pour le tutoriel sur wxPython qui est très bien fait (enfin je crois que c'est toi hein...).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    Bon, j'avais mis résolu mais j'ai un autre problème du genre alors je vais le mettre ici aussi. Toujours dans les encodages donc.
    Quand je sauve des chaînes entrées en unicode via wx dans un fichier avec le module csv, ben il aime pas l'utf8 non plus... La même erreur que dans la question de base de ce sujet si je fais un str().
    J'ai cru voir sur une page que je ne parviens pas à retrouver que le module csv ne serait pas compatible unicode encore? Possible?
    Merci d'avance encore.

  6. #6
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 13
    Par défaut
    pour l'encodage c'est trés simple

    Changer d'install de wxpython

    si ca va pas avec l'ansii alors prenez la version unicode, et inversement

Discussions similaires

  1. wxPython, utf8, ascii
    Par pancrace dans le forum wxPython
    Réponses: 0
    Dernier message: 14/03/2010, 10h42
  2. Réponses: 5
    Dernier message: 19/11/2004, 19h16
  3. Convertir une chaine UTF8 en ISO-8859-1
    Par eods dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/08/2004, 16h57
  4. Réponses: 3
    Dernier message: 12/07/2004, 23h27
  5. Réponses: 2
    Dernier message: 23/06/2004, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo