【发布时间】:2025-11-27 10:20:06
【问题描述】:
遵循UTF-8 everywhere 宣言,主要是它的一部分:how to do text on Windows,我用 wxWidgets 创建了这个简单的例子。我希望 wxWidgets 将字符串文字解释为 UTF-8 字符串,但似乎那个库让我错了。
单个源文件 - main.cpp,编码为 UTF-8 without signature(在 msvc 术语中):
#include <wx/wx.h>
class Mainw: public wxFrame
{
public:
Mainw(wxWindow * parent, wxWindowID wxId, const wxString & label)
: wxFrame(parent, wxId, label)
{
wxBoxSizer * sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(new wxTextCtrl(this, wxID_ANY, wxT("Кириллица")), 1, wxEXPAND | wxALL, 5);
this->SetSizer(sizer);
}
};
class MyApp: public wxApp
{
public:
bool OnInit()
{
Mainw *f = new Mainw(NULL, wxID_ANY, wxT("Frame"));
f->Show();
return true;
}
};
IMPLEMENT_APP(MyApp)
预处理器定义:
UNICODE
_UNICODE
WIN32
__WXMSW__
_WINDOWS
_DEBUG
__WXDEBUG__
wxUSE_UNICODE=1
WXUSINGDLL=1
与 WxWidgets 库版本 3.0.2 链接
标题 - http://sourceforge.net/projects/wxwindows/files/3.0.2/wxWidgets-3.0.2_headers.7z/download
二进制文件 - http://sourceforge.net/projects/wxwindows/files/3.0.2/binaries/wxMSW-3.0.2_vc90_Dev.7z/download
在运行时,此示例生成带有文本 Кириллица 的窗口,而不是 Кириллица(有类似的东西,但当我尝试选择它复制到这里时,它变成了这个)。这意味着,wxWidgets 无法将我的字符串文字解释为 UTF-8,而是将其解释为其他内容 - 可能是系统编码中的文本,即 windows-1251。
有没有办法改变库的这种行为以匹配 utf-8 无处不在的宣言?
结论:
我放弃了。我设法使用 msvc 和标志 wxUSE_UNICODE_UTF8 构建库,但如果不对库配置头进行一些复杂的更改,它将无济于事。看来,此选项仅适用于 POSIX
【问题讨论】:
标签: c++ visual-studio utf-8 wxwidgets