我正在尝试在Windows上使用wxwidgets 3.0.3和mingw-w64。
wxPrintf的修补方式与https://github.com/wxWidgets/wxWidgets/commit/06458cb89fb8449f377b0b782404b9a9cbe3ae2d#diff-9cf4eef4822377649a928c11237e38f6
类似源代码以UTF-8保存
我初学wxLocale如:
wxLocale m_locale;
m_locale.Init(wxLANGUAGE_RUSSIAN , wxLOCALE_DONT_LOAD_DEFAULT )
控制台输出具有8位编码(CP866),我可以使用GetConsoleOutputCP()
和GetConsoleCP()
进行检查。所以我有正确的拉丁和俄语字符输出,但不是希腊语(使用Lucida Console字体):
wxString s = L"Latin, Русский, \u03BE ρπξ\n\n";
或
wxString s = wxString::FromUTF8("Latin, Русский, \u03BE ρπξ\n\n");
wxPrintf(s.utf8_str()); // not correct output for Greek
如果我强制控制台输出为UTF-8:
SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);
wxPrintf
无效。
(使用std::cout << s.utf8_str().data()
一次输出正确。有些内存泄漏?)
使用SetConsoleOutputCP(CP_WINUNICODE);
不会更改控制台编码(保留cp866)。
有没有办法使用标准的wxWidgets方法(wxWidgef提供的wxPrintf和Stream类)来使用Unicode控制台输出?