2015-08-10 4 views
1

là. J'essaye de passer un contenu de champ de texte dans un appel de base de données (mysql). Quand je regarde le champ qui est renvoyé à partir de l'appel Text-> getvalue. (Funct) - je n'ai tout simplement pas le texte qui a été entré dans le champ - via l'une des fonctions UTF dans WXWidgets. J'ai essayé les suivantes:Contrôles Unicode et texte ne pas convertir en UTF8 correctement

wxChar buffer = ((wxTextCtrl*)FindWindow(wxID_TITLE))->GetValue().mb_str(wxConvUTF8);  
    //GooglyGook for whole thing 
    wxChar buffer = ((wxTextCtrl*)FindWindow(wxID_TITLE))->GetValue().mb_str(); 
    //NULL it fails completely 
    wxChar buffer = ((wxTextCtrl*)FindWindow(wxID_TITLE))->GetValue().ToUTF8(); 
    //More GOoblygook 
    wxChar buffer = ((wxTextCtrl*)FindWindow(wxID_TITLE))->GetValue().utf8_str(); 
    //More Gooblygook 
    message.Printf(_T("The title saved as wxCharBuffer =%s"),buffer.data()); 
    wxMessageBox(message,_("Rivendell"), wxICON_ERROR|wxOK); 

La boîte de message est que je suis en train d'afficher ce qui est dans la mémoire tampon wxChar, mais je suis en cours d'exécution dans le débogage je peux simplement regarder pendant la course et confirmer que c'est incorrect. S'il vous plaît noter que j'ai essayé ces lignes de tampon wxChar un à la fois séparément (pas comme ils sont énumérés ici). Je voulais juste montrer des choses que j'avais essayées.

Quelle est la bonne façon de faire cela? Le type de caractères que je tente d'enregistrer dans la base de données ressemble à: "vérifier Todd 1 乞: 乞丐 qǐgài, 乞求 qǐqiú, 乞讨 qǐtǎo."

La sortie gooblygook ressemble à caractères Chineese etc .. même dans la partie anglaise du champ (Check Todd) ...

Toute personne qui a une idée de comment faire s'il vous plaît laissez-moi savoir. Merci ...

Tb

+0

À quoi ressemblent les données brutes de 'wxString' renvoyées par' wxTextCtrl :: GetValue() '? BTW, 'mb_str()' renvoie un 'wxCharBuffer', et' ToUTF8() 'et' utf8_str() 'retournent tous les deux un' wxScopedCharBuffer '. Ils ne renvoient pas 'wxChar', comme votre code l'attend. Et 'wxScopedCharBuffer :: data()' renvoie un 'char *', que vous ne devriez pas passer à '_T ("% s ")', utilisez '_T ("% hs ")' à la place. –

+0

@remy Lebeau - Merci –

Répondre

1

Je vous remercie de l'aide fournie, et après avoir essayé certaines choses que je trouve une réponse. La méthode correcte semble être la suivante: Placez le champ TextCtrl dans un wxString en utilisant wx_str(). Ensuite, placez wxString dans un wxCHarBuffer via la fonction toUTF8(). Utilisez ensuite la fonction data() du wxCHarBuffer pour passer un pointeur char. Une partie de mon problème provenait d'essayer d'afficher ce qui était dans ces champs via Visual Studio Debugger, et/ou wxMessage - donc parfois mes conversions étaient fausses (comme indiqué par l'affiche précédente). J'ai été en mesure de définir le (s) wxString (s) aux caractères Unicode et qu'il soit géré correctement par l'appel mysql (c'est-à-dire que l'appel planterait avant). La variable chk_title renvoyée semble être correctement encodée en UTF8 et échappée. Merci.