WxWidgets with Visual Studio and Unicode Sources
WxWidgets with Visual Studio and Unicode Sources
遵循UTF-8无处不在的宣言,主要是它的部分:如何在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
是否有办法改变库的这种行为以匹配utf-8到处宣言?
不,在Windows下不支持,因为Windows不支持UTF-8区域设置(原则上,它们可以由CRT模拟,但AFAIK没有编译器这样做),wxString(const char*)
ctor默认以当前区域设置编码解释字符串。
有两个简单的解决方案:
- 明确使用
wxString::FromUTF8()
- 使用
wxString(const wchar_t*)
ctor和L"..."
宽char参数
为了完整起见,您还可以通过用wxUSE_UTF8_LOCALE_ONLY=1
重建它来强制库接受UTF-8窄文本,但我不确定这是否会起作用,因为CRT区域设置仍然不同,因此在任何CRT函数中使用非ascii字符很可能不会像预期的那样工作,所以我绝对建议不这样做,除非您只是好奇会发生什么。
- C++ - Unicode Newline
- 如何将unicode字符串从C++传递到delphi
- ascii 和 unicode 在处理级别有什么区别吗?
- 无法从 std::string 中提取C++ Unicode 符号
- MinGW64 - Unicode 源文件错误?
- 使用 Visual Studio 2019 编译 Unicode
- 将ANSI C字符串转换为UNICODE
- 如何从 oracle 数据库 c++ 读取 unicode
- 在特定 Unicode 路径中创建文件
- 如何存储 unicode 字符并将其输出到文件?
- C++ wmain 函数错误时使用 Unicode
- C++:打印 Unicode 字符
- QTextStream,用于打印英语和Unicode 16
- 将 unicode 字符串与 c ++ 符号进行比较?
- 如何在C++中使用 UTF-8 和 Unicode?C++20 char8_t有多大?
- 在 CHtmlEditCtrl::SetDocumentHTML 中使用 Unicode
- C++ - 为什么 unicode 输出不正确?
- 如何在 c++ 中读取用 utf-8 编码的 java unicode 字节字符串
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- WxWidgets with Visual Studio and Unicode Sources