通用字符名(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無關。)
