尝试用C++打印时,Unicode范围超出

Unicode range exceeds when try to print in C++

本文关键字:Unicode 范围 C++ 打印      更新时间:2023-10-16

我正在尝试用C++打印Unicode字符。我的Unicode字符是古突厥语,我有字体。当我使用一封信的代码时,它会给我另一个字符。例如:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str = "u10C00" // My character's unicode code.
    cout << str << endl;
    return 0;
}

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

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

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

示例:

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

std::string并不真正支持unicode,请改用std::wstring。但即使是CCD_ 9也可能存在问题,因为它不支持所有大小。

如果在Qt的情况下使用gtkmm或QString,则可以使用一些外部字符串类,如Glib::ustring

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