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无关。)