我的代码是:

#include <string>
#include <iostream>
#include <wx/string.h>
int main(int n, char** c) {
    std::string a = "你好";
    wxString b = a;
    std::cerr <<a.length()<<"/"<< b.Len()<<"\n";
}

我希望结果是“6/6”,但得到“6/0”。即,b为空。我究竟做错了什么?

我尝试了其他转换,但它们也不起作用。

编译依据:
g++ `wx-config --cxxflags --libs` -std=c++11 -o string-test string-test.cpp

wx版本是3.0.0.0。 gcc版本4.9.2 20141101(Red Hat 4.9.2-1)(GCC)。

最佳答案

wxString默认使用当前语言环境来解释其输入,在您的程序中,该语言环境是默认的“C”,因为您从未更改过。将其设置为与源文件使用的编码相对应的任何语言环境,以使代码按预期的方式工作。

两种更好的选择是:

  • 使用std::wstring = L"..."
  • 如果您确信来源始终使用UTF-8,请使用wxString::FromUTF8("...")
  • 关于c++ - 将STL Unicode字符串转换为wxString可得到空字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28147826/

    10-15 12:47