我需要在Linux终端上打印一些unicode字符iostream.虽然发生了奇怪的事情.我写的时候:
cout << "\u2780";
Run Code Online (Sandbox Code Playgroud)
我明白了:?这几乎就是我想要的.但是,如果我写:
cout << '\u2780';
Run Code Online (Sandbox Code Playgroud)
我明白了:14851712.
问题是,我不知道在编译时要打印的确切字符.因此,我想做一些事情:
int x;
// some calculations...
cout << (char)('\u2780' + x);
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:?.使用wcout或wchar_t替代也不起作用.如何获得正确的打印?
从我在互联网上发现的内容来看,我直接从Debian Wheezy存储库使用g ++ 4.7.2编译器似乎很重要.
Unicode字符\u2780超出了char数据类型的范围.您应该收到此编译器警告,告诉您:(至少我的g ++ 4.7.3给出了它)
test.cpp:6:13: warning: multi-character character constant [-Wmultichar]
Run Code Online (Sandbox Code Playgroud)
如果你想使用像U + 2780这样的字符作为单个单元,你必须使用widechar数据类型wchar_t,或者如果你足够幸运能够使用C++ 11,char32_t或者char16_t.请注意,一个16位单元不足以表示全部Unicode字符.
如果这对您不起作用,可能是因为默认的"C"语言环境不支持非ASCII输出.要解决这个问题,你可以setlocale在程序的开头调用; 这样您就可以输出用户区域设置支持的全部字符:(可能支持也可能不支持您使用的所有字符)
#include <clocale>
#include <iostream>
using namespace std;
int main() {
setlocale(LC_ALL, "");
wcout << L'\u2780';
return 0;
}
Run Code Online (Sandbox Code Playgroud)