CodeBlocks控制台使用wxPuts输出中文错误

方案一

#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");//暂停

}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值