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

时间:2015-03-05 00:11:18

标签: c++ unicode character

我正在尝试在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。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

另一种方法是使用一些外部字符串类,如Glib::ustring,如果使用gtkmm,则使用QString,如果是Qt。

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

答案 1 :(得分:2)

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

示例:

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