wxwidgets 3.0.4 wxString中文问题

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
lzx
In need of some credit
In need of some credit
Posts: 2
Joined: Tue Nov 27, 2018 2:53 pm

wxwidgets 3.0.4 wxString中文问题

Post 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,就可以直接赋值。最初使用的版本,就是不能直接赋,真是气死我了。
lfjking
Earned some good credits
Earned some good credits
Posts: 102
Joined: Mon Nov 14, 2016 1:35 pm

Re: wxwidgets 3.0.4 wxString中文问题

Post by lfjking »

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

改:
wxString s1(wxT("中文"));
wxString s2(wxT("中文"));
wxString s3(str);
wxString s4(str);

s3,s4 是否正确取决与你的wxWidgets 编译时是多字节 还是 unicode
我使用的是 3.10版本 unicode 编译。
改成上面是可以正常显示的。
可视化UI编辑 建议使用wxFormBuilder.
combo
In need of some credit
In need of some credit
Posts: 8
Joined: Sun Aug 26, 2012 10:09 pm

Re: wxwidgets 3.0.4 wxString中文问题

Post by combo »

我也喜欢源码使用utf-8,然后使用中文时不加_T()。
默认生成的程序会出现乱码,解决的方法是给编译器加上选项:-fexec-charset=GBK
lzx
In need of some credit
In need of some credit
Posts: 2
Joined: Tue Nov 27, 2018 2:53 pm

Re: wxwidgets 3.0.4 wxString中文问题

Post by lzx »

学习了 =D>
Post Reply