wxWidgets 中的 Unicode

Unicode in wxWidgets

我正在使用 Visual Studio 2019 在 C++ wxWidgets 中创建一个计算器应用程序。我创建了一个自定义按钮 class,我想将其用于所有数学运算和符号。

如何将按钮的标签设置为√而不是sqrt?如果我这样做,一个?而是显示符号。我还需要在 wxTextCtrl 上显示这些符号,如果我这样做,我在尝试编译时会出现以下错误:(忽略 App.razor,图片不是我的)

我需要将当前字符集从 ASCII 更改为 Unicode 吗?你是怎么做到的?

对于单个字符,你可以只使用wxUniChar。您创建一个 wxUniChar,其值是所需字符的 Unicode 代码点的十六进制值。由于平方根字符的 Unicode 代码点是 U+221A,您可以像这样为这个字符创建一个 wxUniChar:

wxUniChar c(0x221A);

wxUnichar 可以隐式转换为 wxString,因此(假设 wxWidgets 是在 Unicode 模式下构建的),您可以像使用 wxString 一样使用 wxUniChar 变量。例如你可以这样做:

control->SetLabel(c);

dc.DrawText(c,0,0);

@New-Pagodi 的回答(抱歉,不知道如何用名字中的空格来标记人)有效,但只需将文件保存为 UTF-8 编码,就像 MSVS 建议的那样更好的解决方案。即使在这种情况下,请注意您仍然需要使用 wxString::FromUTF8("√") 或通过使用 setlocale() 将您的语言环境编码显式设置为 UTF-8,最近的 Windows 版本(最终)支持它, 在这种情况下你可以只使用 "√", or use wide strings, i.e. L"√"`.

即您必须 both 在文件 中具有正确的字节(e2 88 9a 对于 U+221A 的 UTF-8 编码表示)使用如果您使用 char* 字符串,则从中创建 wxString 时的正确编码。默认情况下,此编码在 Windows 下是 而不是 UTF-8,因此仅使用 wxString("√") 是行不通的。