c++ 字符串utf-8 通用字符名 用unicode编码表示

通用字符名(UCN)

c++11引入了一种新的转义字符——通用字符名(universal character names)。表示就是\uxxxx或者\Uxxxxxxxx,xxxx是一个unicode码点。

#include <iostream>
using namespace std;
int main()
{
    const char* a = "\u4f60";
    // const char* a = "\U00004f60";
    cout << a << endl;
}

要注意,代码中写的是字符的unicode编码,执行时输出的是utf-8编码,注意区分。可以在这里查字符的Unicode编码

在windows下用g++编译执行上述代码,会输出utf-8编码的“你”(a的长度是3+1字节),g++默认使用的执行字符集是utf-8。

如果用msvc编译器,执行字符集默认使用gbk,会输出gbk编码的“你”(a的长度是2+1字节)。

对于【执行字符集和源文件字符集】,可以看我的另一篇博客

u8前缀

如果字符串用u8前缀,则表示这段字符串用utf-8编码执行。

#include <iostream>
using namespace std;

int main()
{
    const char* a = "\u4f60";
    const char* b = u8"好";
    const char* c = "啊";
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
}

上述代码以utf-8格式保存,用g++编译,会输出utf-8编码的“你好啊”。因为g++默认使用的执行字符集就是utf-8。

如果以GBK格式保存并用msvc编译,由于默认执行字符集是GBK,会将“你”和“啊”用GBK编码输出,将“好”用utf-8编码输出。(再次提醒注意,这里源码保存为GBK和执行字符集是GBK无关。)

posted @ 2021-09-07 15:31  王冰冰  阅读(1935)  评论(0编辑  收藏  举报