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

wxWidgets Discussion :

Valeurs des wxTextCtrl en UNICODE ?


Sujet :

wxWidgets

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut Valeurs des wxTextCtrl en UNICODE ?
    Bonjour à tous,

    suite à un problème rencontré dans l'export de données dans un fichier xml (voir ce post dans le forum c++), je me suis aperçu que j'avais un problème avec les valeurs des wxTextCtrl.

    Voici un code complet qui reproduit mon problème et me semble mettre en évidence l'anomalie :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include <wx/wx.h>
     
    class FenetrePrincipale : public wxFrame
    {
        public:
     
            FenetrePrincipale(const wxString & titre,
                    const wxPoint & position,
                    const wxSize & taille,
                    long style = wxDEFAULT_FRAME_STYLE);
     
            void OnOk(wxCommandEvent & event);
     
        private:
            wxTextCtrl * Saisie;
     
        DECLARE_EVENT_TABLE()
    };
     
    class Application : public wxApp
    {
    public:
        virtual bool OnInit()
        {
            FenetrePrincipale *fenetre = new FenetrePrincipale(wxT("Test"), wxPoint(-1, -1), wxSize(800, 600));
            fenetre->Show(true);
            return true;
        }
    };
     
    IMPLEMENT_APP(Application)
     
    BEGIN_EVENT_TABLE(FenetrePrincipale, wxFrame)
        EVT_BUTTON(wxID_OK,  FenetrePrincipale::OnOk)
    END_EVENT_TABLE()
     
    FenetrePrincipale::FenetrePrincipale(const wxString& titre,
            const wxPoint& position,
            const wxSize& taille,
            long style) :
        wxFrame(NULL, -1, titre, position, taille, style)
    {
        this->Saisie = new wxTextCtrl(this, -1);
        wxButton * Ok = new wxButton(this, wxID_OK);
     
        wxBoxSizer * sizerP = new wxBoxSizer(wxVERTICAL);
        sizerP->Add(Saisie, 0, wxALL | wxALIGN_CENTER, 10);
        sizerP->Add(Ok, 0, wxALL | wxALIGN_CENTER, 10);
     
        SetSizer(sizerP);
    }
     
    void FenetrePrincipale::OnOk(wxCommandEvent & WXUNUSED(event))
    {
        wxString Avant = this->Saisie->GetValue();
     
        wxMessageBox(Avant, wxT("Avant, tout va bien"));
     
        wxString Apres(Avant.mb_str(), wxConvUTF8);
     
        wxMessageBox(Apres, wxT("Apres... rien ne va plus"));
    }
    Ce code permet juste d'afficher un wxTextCtrl et un bouton. Quand on clique sur le bouton, un premier message s'affiche avec le contenu du wxTextCtrl. Ensuite, ce contenu est transformé en char * (avec mb_str()), puis reconvertis en wxString. Le résultat est affiché dans une nouvelle MessageBox.

    Si on saisis un texte sans caractères spéciaux (accents...), pas de problème : les deux MessageBox affichent la même chose.

    Si on saisis un texte avec accent (exemple 'testé'), la deuxième MessageBox n'affiche plus rien (et pour cause, puisque la conversion en char * ne produit pas une chaîne en UTF-8).

    J'ai l'impression que la valeur du wxTextCtrl n'est pas vraiment de l'UNICODE :/

    Est-ce que mon raisonnement est juste ?
    Y-a-til des erreurs dans mon code ?
    Comment corriger ce problème ?

    Merci pour votre aide !

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    J'ai trouvé la solution (du moins je crois )

    En fait, les wxString() issues de wxTextCtrl sont codées en ISO-8859-1 (du moins sous Windows 2000, sur le poste utilisé).

    Et quand on leur applique mb_str(), l'encodage n'est pas modifié...

    Pour parvenir à mes fins, j'ai utilisé mb_str(wxConvUTF8) à la place, et là, ça a l'air de fonctionner.

    Mais je croyais que dans wxWidgets compilé avec l'option UNICODE=1, toutes les wxString étaient codées en UNICODE. J'ai rêvé ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    UNICODE est une extension de ISO-8859-1.
    UTF-8 (dont les codes sont de taille variable) est un dérivé de UNICODE.
    Si ton application génère de l'UNICODE, alors c'est probablement compatible ISO-8859-1 mais probablement pas compatible UTF-8.

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par boromir73
    UNICODE est une extension de ISO-8859-1.
    UTF-8 (dont les codes sont de taille variable) est un dérivé de UNICODE.
    Si ton application génère de l'UNICODE, alors c'est probablement compatible ISO-8859-1 mais probablement pas compatible UTF-8.
    Euh... Moi au contraire il me semblait qu'UTF-8 était un encodage particulier du jeu de caractères UNICODE. ISO-8859-1, c'est un autre jeu de caractères (latin), restreint par rapport à UNICODE, non ?

    Donc, si wxWidgets gére l'UNICODE, je ne vois pas pourquoi il ne serait pas compatible UTF-8...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    Je me suis emmêlé les pinceaux sur l'encodage, mais finalement je suis d'accord avec toi.
    Merci pour ta correction qui m'indique que j'ai besoin d'une petite mise à jour...

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par boromir73
    Merci pour ta correction qui m'indique que j'ai besoin d'une petite mise à jour...
    De rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeurs des wxTextCtrl en Unicode
    Par dug dans le forum wxWidgets
    Réponses: 0
    Dernier message: 10/03/2009, 14h16
  2. [Debutant][Système]Récupérer la valeur des variables systeme
    Par cameleon2002 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/02/2007, 09h57
  3. [html:text][indexed]Valeurs des liste null...
    Par thibaut dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 08/09/2004, 09h36
  4. [VB.NET] Choisir les valeurs des items d'un combo box?
    Par Eithelgul dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/06/2004, 10h13
  5. [servlet][tester la valeur des champs récupérés]
    Par maya5 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/05/2004, 10h06

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