如何在数组中存储 Unicode 字符?

How to store Unicode characters in an array?

我正在编写一个 C++ wxWidgets 计算器应用程序,我需要将运算符的字符存储在一个数组中。我有类似 int ops[10] = {'+', '-', '*', '/', '^'}; 的东西。如果我还想在所述数组中存储 ÷× 等字符,以便它们也可以在 wxTextCtrl 和自定义中显示按钮?

更喜欢使用 wchar_t 而不是 int

wchar_t ops[10] = {L'+', L'-', L'*', L'/', L'^', L'√', L'÷', L'×'};

这些简单地支持您描述的字符,并简单且正确地转换为 wxStrings。

这实际上是一个毛茸茸的问题,尽管乍一看并不像。您最好的选择是使用 Unicode 控制序列,而不是使用源代码编辑器添加特殊字符。

wxString ops[]={L"+", L"-", L"*", L"\u00F7"};

您需要确保正确编译了√、÷和×等字符。

您的源文件 (.cpp) 需要以确保编译器生成正确字符的方式存储它们。这比看起来更难,尤其是当涉及 svn、git、windows 和 linux 时。

大多数时候 .cpp 文件是 ANSI 或 8 位编码的,不支持开箱即用的 Unicode 常量。

您可以将源文件保存为 UTF-8 代码页,以便保留这些字符。但并非所有编译器都接受 UTF-8

最好的方法是使用 Unicode 控制字符对它们进行编码。 wxString div(L"\u00F7");是 ÷ 的字符串。或者在你的情况下可能是 wxChar div('\u00F7').您必须查找其他特殊字符的 Unicode 控制序列。这样你的源文件将只包含 ANSI 字符并且将被所有编译器接受。当您与不同的 OS 平台交换源文件时,您还将避免代码页问题。

然后你必须确保你编译的 wxWidgets 具有 UNICODE 识别能力(尽管我认为这是 wx3.x 的默认设置)。然后,如果您的 OS 支持它,这些特殊字符应该会显示出来。

阅读 Unicode 控件(维基百科)。在 utf8everywhere.org 中也可以找到很好的输入。文件 .editorconfig 也可以提供帮助。