方案一
#include <wx/string.h>
#include <wx/crt.h>
int main(int argc,char **argv)
{
printf("\n\rlocale is %s",setlocale(LC_ALL,NULL));//输出一下语言环境
wxString str1 = wxT("Linux");
wxString str2 = wxT("操作");
wxString str3 = wxT("系统");
wxString str = str1 + wxT(" ") + str2 + wxT(" ") + str3;
//wxPuts(str);//这种写法,中文无法输出
wxPuts(str.ToStdWstring());//这种写法中文才能正确输出
}
注意:
前提是你根据网上搜索到的答案,做了如下设置
Setings->Compiler->Compiler settings->Other compiler options
-finput-charset=UTF-8
-fexec-charset=WINDOWS-936
分割线============================再见分割线
方案二
另一种方法,不需要设置编译器
直接在程序开头,输入以下语句
setlocale(LC_ALL, "");
或
setlocale(LC_CTYPE, "");
或
setlocale(LC_ALL, "zh_CN.UTF-8");
或
setlocale(LC_ALL, "zh_CN.GBK");
//这几个好多都行
具体涵义如下:
LC_ALL
所有类别,如下所示。
LC_COLLATE
strcoll 、 _stricoll, wcscoll、_wcsicoll、 strxfrm、 _strncoll、 _strnicoll、_wcsncoll、 _wcsnicoll 和 wcsxfrm 函数。
LC_CTYPE
字符处理函数 (除外 isdigit、isxdigit、mbstowcs和 mbtowc,不受影响)。
LC_MONETARY
localeconv 函数返回货币格式信息。
LC_NUMERIC
对于格式化输出实例 (例如 printf),数据转换实例和通过 localeconv返回的非货币格式信息的十进制点字符。 除十进制点字符之外,还有 LC_NUMERIC 设置通过 localeconv 返回的千位分隔符和分组控件字符串。
LC_TIME
strftime 、 wcsftime 函数。
printf("\n\rlocale is %s",setlocale(LC_ALL,NULL));
setlocale(LC_ALL, "");
setlocale(LC_ALL, "C");
setlocale(LC_ALL, "zh_CN.UTF-8");
// setlocale(LC_ALL, "zh_CN.GBK");
setlocale(LC_CTYPE, "");
// wxLocale::Init(wxLANGUAGE_CHINESE_SIMPLIFIED,)
wxString str1 = wxT("Linux");
wxString str2 = wxT("操作");
wxString str3 = wxT("系统");
// wxString str = str1 + wxT(" ") + str2 + wxT(" ") + str3;
wxString str = str1 + str2 + str3;
printf("\n\rlocale is %s",setlocale(LC_ALL,NULL));
printf("\n\r1.printf=" + str);//但是,这个依旧乱码。有知道的吗?告知一声啊。
wxPrintf("\n\r2.wxPrintf=%s" , str.wc_str(*wxConvCurrent));
wxPuts("\n\r3.wxPuts=" + str.ToStdWstring());
// wxPuts("\n\r4.wxPuts=" + str);
cout<<"\n\r5.cout="<<str<<endl;
方案三
#include <wx/string.h>
#include <wx/crt.h>
#include <iostream>
#include <wx/intl.h>
using namespace std;
int main(int argc,char **argv)
{
printf("\n\rlocale is %s",setlocale(LC_ALL,NULL));
setlocale(LC_ALL, "");
wxString str1 = _("Linux");
wxString str2 = _("操作");
wxString str3 = _("系统");
// wxString str = str1 + wxT(" ") + str2 + wxT(" ") + str3;
wxString str = str1 + str2 + str3;
printf("\n\rlocale is %s",setlocale(LC_ALL,NULL));
wprintf("\n\r1.printf=" + str);//改用wprintf
wxPrintf("\n\r3.wxPrintf=%s" , str.ToStdWstring());
wxPuts("\n\r4.wxPuts=" + str.ToStdWstring());
cout<<"\n\r5.cout="<<str<<endl;
cout<<"\n\rSystemEncodingName="<<wxLocale::GetSystemEncodingName()<<endl;
system("pause");//暂停
}