Unicode和文本控件未正确转换为UTF8

时间:2015-08-10 17:26:11

标签: c++ unicode utf-8

那里。我试图将文本字段内容传递给数据库调用(mysql)。当我查看从Text-> getvalue。(funct)调用返回的字段时 - 我只是不通过WXWidgets中的任何UTF函数获取输入到字段中的文本。我尝试过以下方法:

    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);

消息框是我试图显示wxChar缓冲区中的内容的方式, 但是我在调​​试中运行,所以我可以在运行期间查看它并确认它是不正确的。请注意,我已经分别尝试过这些wxChar缓冲行(不像这里列出的那样)。只是想展示我尝试过的东西。

这样做的正确方法是什么?我试图在数据库中保存的字符类型如下:“检查托德1乞:乞丐qǐgài,乞求qǐqiú,乞讨qǐtǎo。”

gooblygook输出看起来像Chineese角色等。即使在该领域的英语部分(Check Todd)......

任何想知道如何操作的人请告诉我。感谢...

1 个答案:

答案 0 :(得分:1)

我感谢所提供的帮助,在尝试了一些事情后,我找到了答案。 执行此操作的正确方法如下:使用wx_str()将TextCtrl字段放入wxString中。然后通过toUTF8()函数将wxString放入wxCHarBuffer。然后使用wxCHarBuffer的data()函数传递一个char指针。

我的部分问题源于试图通过Visual Studio Debugger和/或wxMessage框显示这些字段中的内容 - 所以有时我的转换是错误的(如前一张海报所述)。 我能够将wxString(s)设置为Unicode字符,并通过mysql调用正确处理(即Call之前会崩溃)。返回的chk_title变量似乎被正确编码为UTF8并进行转义。 感谢。