wxWidgets Windows下控制台输入输出

1 #include <wx/wx.h>
2 #include <cstdlib>
3  void strtest()
4 {
5 wxString str1=wxT("Linux");
6 wxString str2(wxT("Operating"));
7 wxString str3(wxT("System"));
8 wxString str4(wxT("操作系统"));
9
10 wxString str=str1+wxT(" ")+str2+wxT(" ")+str3+wxT(" ")+str4+wxT("\n");//
11   const char* output= (const char*)wxConvCurrent->cWX2MB(str);//+str4;
12 printf(str);
13
14 wxPuts(str);
15 printf("\n");
16
17 wxPrintf(str);
18 printf("\n");
19
20 wxPuts(output);
21 printf("\n");
22
23 wxPrintf(output);
24 printf("\n");
25 }
26
27 int main(int argc,char* argv[])
28 {
29 strtest();
30 system("pause");
31
32 }

在上面的五种输出方式中,只有第一种能完全正确显示,后面四种中文字符串没有显示。那么如果用iostream流会如何呢?

1 #include <wx/wx.h>
2 #include <cstdlib>
3 #include <iostream>
4 using namespace std;
5
6 void strtest1()
7 {
8 wxString str1=wxT("Linux");
9 wxString str2(wxT("Operating"));
10 wxString str3(wxT("System"));
11 wxString str4(wxT("操作系统"));
12
13 wxString str=str1+wxT(" ")+str2+wxT(" ")+str3+wxT(" ")+str4+wxT("\n");//
14 cout<<str.c_str();
15
16 string input;
17 cout<<"Please tell me your name:"<<wxT("请告诉我你的名字");
18 getline(cin,input,'\n');
19 wxString result(input);
20 cout<<input<<endl;
21 cout<<result.c_str()<<endl;
22 }
23 int main(int argc,char* argv[])
24 {
25 strtest1();
26 system("pause");
27
28 }

结果显示输出正确,除了[<<wxT("请告诉我你的名字")]显示为乱码,oops!!

你可以有至少两种办法解决。一是把该字符串字面值声明为一wxString的变量msg,然后cout<<msg.c_str(),或者你可以直接cout<<wxString(wxT("请告诉我你的名字")).c_str().搞定。

剩下最后一件值得一提的是字符串wxT("请告诉我你的名字")的长度,如果你声明了wxString str=wxT("请告诉我你的名字"),那么str.length()或者str.size()的值都是8,而不是16。中英文混合的字符串一个英文字母占1,而一个汉字也占1.你就晕吧~

原文地址:https://www.cnblogs.com/godspeedsam/p/1983894.html