在使用wxWidgets库跨平台开发的时候,在遇到字符集的时候很费劲,往往在WINDOWS下能正常显示到了Linux下就是乱码了,这时最好是统一用宽字符集,在wx库中,使用宽字符集时需要各种各样的转换,而且往往随着define的不同情况不一样,我到现在都没完全明白。凭着写wx程序的经验,总结以下转换示例,以后要用的时候,直接照搬下面的方法。当然还有其它的方法,这里没有举出来。
wxString转换
wxString logBuf;
wxLogMessage( wxT("%s"), logBuf.c_str() );
wxString->char*
wxString wx_string=_T("hello");
char ansi_string[30];
strcpy(ansi_string,wx_string.mb_str());
char*->wxString
char ansii_string[100] = "我hello";
wxString wx_string(ansii_string,wxConvUTF8);
wxString->TCHAR*
wxString wx_string=_T("hello");
TCHAR wchar_string[30];
wcscpy(wchar_string,wx_string.wc_str());
TCHAR*->wxString
TCHAR *tchar_string = _T("hello");
wxString wx_string(tchar_string,wxConvUTF8);
char*->TCHAR*
char *ansii_string = "hello";
int size = strlen(ansii_string);
TCHAR unicode_string[100];
mbstowcs(unicode_string, ansii_string, size+1);
TCHAR*->char*
TCHAR* unicode_string=_T("unicode string");
int size= wcslen(unicode_string);
char ansi_string[30];
wcstombs(ansi_string, unicode_string, size+1);
wxString Message("打开源文件失败!",wxConvLocal);
wxMessageBox(Message);
char rsdata[100];
sprintf(rsdata,"刚读取的数据存放在:");
wxString mess(rsdata,wxConvLocal);
wxMessageBox(mess);