我编写了一个简单的程序来打印 unicode 微笑表情符号。不幸的是,打印了其他东西。有谁知道这段代码有什么问题吗?谢谢
\n\n#include <iostream>\n#include <string>\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n string str = u8"\\u1F600";\n\n cout << str << endl;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n编译及输出:
\n\ng++ -pedantic -Wall test109.cc && ./a.out\n\xe1\xbd\xa00\nRun Code Online (Sandbox Code Playgroud)\n
转义\\u序列最多限制为 4 个十六进制数字,因此"\\u1F600"被解析为两个单独的字符\\u1F60( \xe1\xbd\xa0) 和0,这正是您在控制台输出中看到的内容。
代码点U+1F60 GREEK SMALL LETTER OMEGA AND PSILI与代码点U+1F600 GRINNING FACE有很大不同。
\n\n对于您正在尝试的内容,您需要使用\\U转义符,它最多允许 8 个十六进制数字:
string str = u8"\\U0001F600";\nRun Code Online (Sandbox Code Playgroud)\n\n或者,您可以使用其中之一:
\n\nstring str = u8"\\xF0\\x9F\\x98\\x80"; // UTF-8 codeunits in hex format\nRun Code Online (Sandbox Code Playgroud)\n\nstring str = u8"\\360\\237\\230\\200"; // UTF-8 codeunits in octal format\nRun Code Online (Sandbox Code Playgroud)\n\nstring str = u8""; // if your compiler/editor allows this\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |