gpt4 book ai didi

c++ - 带有 Visual Studio 和 Unicode 源代码的 WxWidgets

转载 作者:行者123 更新时间:2023-11-28 02:24:15 25 4
gpt4 key购买 nike

UTF-8 everywhere 之后声明,主要是它的一部分:how to do text on Windows ,我用 wxWidgets 创建了这个简单的例子。我希望 wxWidgets 将字符串文字解释为 UTF-8 字符串,但似乎那个库让我误会了。

单个源文件 - main.cpp,编码为 UTF-8 无签名(在 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 Library 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 构建了库,但如果不对库配置 header 进行一些复杂的更改,这将无济于事。看来,这个选项只适用于 POSIX

最佳答案

Is there any way to change this behavior of library to match utf-8 everywhere manifesto?

不,不在 Windows 下,因为 Windows 不支持 UTF-8 语言环境(原则上,它们可以被 CRT 模拟,但 AFAIK 没有编译器这样做)和 wxString(const char*) 默认情况下,ctor 解释当前语言环境编码中的字符串。

但是有两个简单的解决方案:

  1. 明确使用 wxString::FromUTF8()
  2. wxString(const wchar_t*) 构造函数与 L"..." 宽字符参数一起使用。

为了完整起见,您还可以通过使用 wxUSE_UTF8_LOCALE_ONLY=1 重建它来强制库接受 UTF-8 窄文本,但我不确定这是否会起作用,因为CRT 语言环境仍然会有所不同,因此将非 ASCII 字符与任何 CRT 函数一起使用很可能无法按预期工作,因此我绝对建议您这样做,除非您只是想看看会发生什么.

关于c++ - 带有 Visual Studio 和 Unicode 源代码的 WxWidgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com