Page 1 of 1

wxwidgets 3.0.4 wxString中文问题

Posted: Tue Nov 27, 2018 3:18 pm
by lzx
最近刚刚学wxwidgets,使用的操作系统是Deepin 15.8,gcc 版本7.3.0,IDE是codeblocks 16.01,wxwidgets 3.0.4,库是unicode、release动态库,实现方式是gtk2与gtk3,编译参数是wx-config --cxxflags与wx-config --libs,cpp文件编码是utf-8。现在遇到了wxString不能使用中文的问题。

官方文档里说再也不需要使用wxT()或者_T()了,从3.0开始默认使用unicode。但是我实际运行的结果却不是这样。

std::string str("中文");

wxString s1("中文");
wxString s2(_("汉字"));
wxString s3(str);
wxString s4(str.c_str());

wxString s5(_T("汉字"));
wxString s6 = wxString::FromUTF8("中文");
wxString s7("汉字",wxConvUTF8);

上面代码的运行结果,str和s5,s6,s7结果是正常的,其它不行。要想让wxString支持中文,最简单的方式还是_T(),文档说已经不需要了,应该是哪里实现出错。

这两天又翻了翻手册,发现wxString有默认的编码方式,可以通过wxLocale::GetSystemEncodingName()获得。理论上讲,当wx的编码方式和源码的编码方式相同时,是可以直接赋值的。我在win10下用tdm-gcc 5.1.0编译unicode版wx3.0.4,wxLocale::GetSystemEncodingName()输出的是window936,所以当源码采用GBK方式时,确实可以直接赋值。当源码采用utf8时,就需要转码了。
然而比较蛋疼的是,当我回到linux,查看wx默认编码,发现是uft8,明明我之前源码用的也是utf8啊,就是不能赋值。后来又编译了ansi版的wx3.0.4,就可以直接赋值。最初使用的版本,就是不能直接赋,真是气死我了。