在 wxWidgets 中处理 C 语言字符串真是一件令人头痛的事情,因为 wxWidgets 库是 C++ 编写的,类中的成员函数大多使用 wxChar*, wxString 作为参数。然而众所周知,在 C 语言里,字符串是以字符数组的形式存储,所以当 wxWidgets 需要和一些 C 库结合使用的时候,比如 Lua,难免会遇到将 C 字符串实例化成 wxString 或 wxChar* 对象的过程中出现乱码的问题。而且这种乱码的出现与一般编程中遇到的乱码不太一样,使用的转换方法不正确,不论是中文还是英文都会出现乱码,一视同仁。
一开始,我都是按照文档中的例子使用 wxString::Printf 方法进行转换,通常情况下不会有问题,例如:
wxString temp;
temp.Printf(wxT("abc");//字符显示正确
temp.Printf(wxT("测试");//字符显示正确
但是使用一段时间之后发现 Printf 函数只能正确得到第一个参数中的字符,其他参数中的字符都会变成乱码,即使是英文字符也会有问题,例如:
wxString temp;
const char * str = "abc";
temp.Printf(wxT("%s", "abc");//temp会包含乱码
temp.Printf(wxT("%s", str);//temp会包含乱码
阅读官方文档后,我发现 wxWidgets 还提供了另外一个函数 wxString::FromUTF8,函数声明如下:
static wxString FromUTF8(const char* s)
static wxString FromUTF8(const char* s, size_t len)
使用 wxString::FromUTF8 就可以顺利地解决问题,而且这还是一个静态函数,不需要实例化就可以调用,函数执行成功会返回 wxString 的一个实例:
const char * str = "abc";
wxString::FromUTF8("abc");//返回 wxString 实例,值为"abc"
wxString::FromUTF8(str);//返回值与上一条语句相同
如果遇到要将 wxString 转化成为 char* 的情况,有三个函数可供使用:wxString::c_str(), wxString::wc_str(), wxString::mb_str()
mb_str returns a C string representation of the string, a const char*, regardless of whether Unicode is enabled. In Unicode mode, the string is converted, and data may be lost.
wc_str returns a wide character representation of the string, a wchar_t*, regardless of whether Unicode is enabled. In ANSI mode, the string is converted to Unicode.
c_str returns a pointer to the string data (const char* in ANSI mode, const wchar_t* in Unicode mode). No conversion takes place.
分享到:
相关推荐
wxWidgets中文教程带实例
wxWidgets中文教程
这是一部学习wxWidgets的基础文档,能够让你快速的学习
wxWidgetsGUI《Cross-Platform GUI Programming with wxWidgets》的清晰中文版
全书共有20章,第·1·章简要介绍了·wxWidgets·的发展历史和框架结构,第2章介绍了wxWidgets的程序框架及其实现,第3章深入剖析了wxWidgets的事件处理机制,第4~11章详细讲述了wxWidgets的图形用户界面、数据结构...
wxWidgets中文PDF教程,方便地开发基于C++的桌面程序,比MFC好用很多
wxWidgets在codeblocks中的配置
嵌入式的版本也正在開發中[2]。 函式庫本身使用C++語言開發,但也有其它不同程式語言的綁紮,例如:Python(wxPython)、Lua(wxlua)、Perl(wxPerl)、Ruby(wxRuby)、Smalltalk(wxSmalltalk)、Java(wx4j)、...
想用wxWidgets 进行界面开发,苦于wxWidgets 的参考资料很少,几乎只有一本书——《使用wxWidgets进行跨平台程序开发》,但是这本不适合用作参考手册,即想找那个函数就可以很快找到的那种。最后在wxWidgets官网找到...
wxWidgets和MFC混合编程 讲述在一个程序中wxWidgets和MFC的窗口如何一起工作。
wxWidgets Hello World 源码(中文注释)
wxwidgets 教程
wxwidgets开发入门 API查询 深入学习wxwidgets
wxWidgets库给程序员提供了大量的类,这些类支持很多方法(方法是C++中的关键词)以供其 使用,程序员可以通过重载这些方法来实现定制的行为,一个典型GUI程序所作的事情包括:显示一个包含各种空间的窗口,在窗口中...
NULL 博文链接:https://emonkey.iteye.com/blog/1685838
wxWidgets跨平台界面开发,一次开发,全平编译运行。
WIN版本的wxWidgets-3.1.3.zip wxWidgets源码 来自官网 下载链接 https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.3/wxWidgets-3.1.3.zip 不想花积分的可以直接下载。
wxWidgets官方帮助文档wxWidgets-2.8.7-CHM
wxWidgets 下的皮肤组件,非常好用
wxWidgets自绘标题栏,项目源码分享,请使用vs2015编辑器