带有wxwidgets的Unicode控制台输出

时间:2017-11-18 17:48:29

标签: c++ wxwidgets

我正在尝试在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控制台输出?

0 个答案:

没有答案