wxWidgets中的Unicode 我在VisualStudio 2019中用C++ WxWiWGET创建计算器应用程序。我已经创建了一个自定义按钮类,我想用于所有数学运算和符号

wxWidgets中的Unicode 我在VisualStudio 2019中用C++ WxWiWGET创建计算器应用程序。我已经创建了一个自定义按钮类,我想用于所有数学运算和符号,c++,unicode,ascii,wxwidgets,C++,Unicode,Ascii,Wxwidgets,如何将按钮的标签设置为√ 而不是sqrt?如果我这样做,a?而是显示符号。我还需要在WXTEXTCRL上显示这些符号,如果我这样做,在尝试编译时会出现以下错误:(忽略App.razor,图片不是我的) 是否需要将当前字符集从ASCII更改为Unicode?如何做到这一点?对于单个字符,您可以使用wxUniChar。您可以使用所需字符的Unicode代码点的十六进制值创建wxUniChar。由于平方根字符的Unicode代码点为U+221A,因此可以为该字符创建wxUniChar,如下所示: w

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


是否需要将当前字符集从ASCII更改为Unicode?如何做到这一点?

对于单个字符,您可以使用wxUniChar。您可以使用所需字符的Unicode代码点的十六进制值创建wxUniChar。由于平方根字符的Unicode代码点为U+221A,因此可以为该字符创建wxUniChar,如下所示:

wxUniChar c(0x221A);
wxUnichar可以隐式转换为wxString,因此(假设wxWidgets是在Unicode模式下构建的),可以像使用wxString一样使用wxUnichar变量。例如,您可以执行以下操作:

control->SetLabel(c);

@New Pagodi的答案(对不起,我不知道如何在名字中用空格标记人)是可行的,但正如MSVS建议的那样,用UTF-8编码保存文件是一个更好的解决方案。即使在这种情况下,请注意,您仍然需要使用
wxString::FromUTF8(“√")
或通过使用最新Windows版本(最后)支持的
setlocale()
将区域设置编码显式设置为UTF-8,在这种情况下,您只需使用
”√,或使用宽字符串,即
L√“`


也就是说,如果您使用的是
char*
字符串,那么您必须在文件中都有正确的字节(
e2 88 9a
表示U+221A的UTF-8编码),并在从中创建
wxString
时使用正确的编码。默认情况下,此编码在Windows下不是UTF-8,因此只使用
wxString(“√“
不起作用。

这只是字体问题。您应该使用支持此类字符的字体。我已将字体从Lato更新为Arial,这是一种支持Unicode的字体,我收到了相同的错误消息。@GiacomoCatenazzi这不是字体问题。如果OP使用
”√“
在源代码文件中,显然该文件必须另存为Unicode,否则√ 要保留字符吗?这正是错误信息about@phuclv,和iKebab897:不,支持unicode与使用能够显示此类unicode字符的字体不同。任何字体都不能显示所有指定的unicode字符。此外,使用NOTO字体进行谷歌搜索(以显示所有unicode字符)将字符拆分为多种字体。并且:源代码的编码与显示编码无关(在过去,这个问题在unicode之前更常见)@GiacomoCatenazzi我知道没有任何字体支持所有Unicode字符。但是这里的问题是OP在源代码中键入了一个非ASCII字符,VS要求将文件保存在UTF-8中以保留该字符,或者放弃所有非ASCII字符,并像以前一样将文件保存为ASCII谢谢,它成功了!您只需删除空格并删除m一句话。我不明白,抱歉,用外行的话来说,我应该怎么做才能在我的解决方案中使用Unicode字符?我不熟悉编码和区域设置的工作原理。另外,如果我想在数组中存储这些特殊字符呢?我有如下方法:int-ops[10]={'+','-','*','/','^};还应使用哪种类型来存储字符,例如√ 还有其他数学符号?我想你需要理解你在做什么,其实并不复杂:每个
char*
字符串都必须与某种编码相关联,才能正确地将其转换为Unicode。现在这种编码几乎总是UTF-8。至于单个“字符”“如果你不关心代理(AyjiS..),或者在最近的C++版本或 WxuniCar < /Co>中,你可以不使用代理(EnjJIS…),或者<代码> CAR32×T< <代码>。
dc.DrawText(c,0,0);