尝试在 C++ 中打印时超出 Unicode 范围

Unicode range exceeds when try to print in C++

我正在尝试在 C++ 中打印 Unicode 字符。我的 Unicode 字符是 Old Turkic,我有字体。当我使用一个字母的代码时,它会给我另一个字符。例如:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str = "\u10C00" // My character's unicode code.
    cout << str << endl;
    return 0;
}

这个片段给出了另一个字母的输出,在它的结尾后面有一个 0。 例如,它给了我这个(假设我想打印“Ö”字母): A0

但是当我从 ubuntu 中的字符映射应用程序复制并粘贴我的实际字母到我的源片段时,它给了我我想要的。这里有什么问题?我的意思是,我想使用字符代码方式 "\u10C00",但它不能正常工作。我认为这个字符串太长,所以它使用前 6 个字符并在末尾弹出 0。我该如何解决这个问题?

std::string 并不真正支持 unicode,请改用 std::wstring。 但即使 std::wstring 也可能有问题,因为它不支持所有尺寸。

另一种方法是使用一些外部字符串 class 例如 Glib::ustring 如果你使用 gtkmm 或 QString 对于 Qt

几乎每个 GUI 工具包和其他库都提供自己的字符串 class 来处理 unicode。

转义后/u必须正好是4个十六进制字符。如果你需要更多,你应该使用 /U。第二个变体需要 8 个字符。

示例:

"\u00D6"      // 'Ö' letter
"\u10C00"     // incorrect escape code!
"\U00010C00"  // your character