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