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
我写了一个简单的程序来打印一个 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