C++:打印unicode字符

C++: printing unicode characters

我写了一个简单的程序来打印一个 unicode 微笑表情符号。不幸的是,打印了其他内容。有谁知道这段代码的问题是什么?谢谢

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

int main(int argc, char *argv[])
{
    string str = u8"\u1F600";

    cout << str << endl;

    return 0;
}

编译输出:

g++ -pedantic -Wall test109.cc && ./a.out
ὠ0

\u escape sequences 的格式为 \u####(即恰好 4 个十六进制数字)。你需要 \U########:

auto str = u8"\U0001F600";

或者,单独编码UTF8字节:

auto str2 = u8"\xf0\x9f\x98\x80";

有效。

您可以使用以下任何适合您的方法。

string str = "\u263A"; //        -->  ☺

//string str = u8"\xe2\x98\xba"; -->  ☺

//string str = u8"\U0001F600";   --> 

//string str = u8"";           --> 

//string str = "202"    -->  ☺

cout << str << endl;

\u 转义序列被限制为最多 4 个十六进制数字,因此 "\u1F600" 被解析为两个单独的字符 \u1F60 () 和 0],这正是您在控制台输出中看到的内容。

代码点U+1F60 GREEK SMALL LETTER OMEGA WITH PSILI is very different than codepoint U+1F600 GRINNING FACE.

对于您的尝试,您需要使用 \U 转义符,它最多允许 8 个十六进制数字:

string str = u8"\U0001F600";

或者,您可以改用其中之一:

string str = u8"\xF0\x9F\x98\x80"; // UTF-8 codeunits in hex format
string str = u8"0700"; // UTF-8 codeunits in octal format
string str = u8""; // if your compiler/editor allows this