C++在C11標準中加入了對Unicode編碼的支持,新增了wchar_t、char16_t、char32_t內置數據類型。
cout << sizeof(char) << endl;
cout << sizeof(wchar_t) << endl;
cout << sizeof(char16_t) << endl;
cout << sizeof(char32_t) << endl;
經以上代碼測試,這三個數據類型的大小爲:1、4、2、4字節(Ubuntu X64環境下);
char:標準ASCII字符,大小爲1字節(8bit),可以存儲UTF-8編碼字符
wchar_t:變寬字符,大小根據操作系統環境而定(據我所知Windows下是2字節(16位),Linux下是4字節(32位))
char16_t:16位長字符,可以存儲UTF-16編碼字符
char32_t:32位長字符,可以存儲UTF-32編碼字符
讓這些字符表示相應的字符串,則爲:
wchar_t wstr[] = L"我是寬字符常量";
char u8str[] = u8"我是UTF-8";
char16_t u16str[] = u"我是UTF16";
char32_t u32str[] = U"我是UTF32";
其中:
L爲變寬字符串\字符的前綴
u8爲UTF-8編碼字符串\字符的前綴
u爲UTF-16編碼字符串\字符的前綴
U爲UTF-32編碼字符串\字符的前綴
在標準模板庫中也有相應的string實現:
typedef basic_string<char> string;
typedef basic_string<char16_t> u16string;
typedef basic_string<char32_t> u32string;
實現舉例:
wstring wstrr(L"我是寬字符字符串");
string u8strr(u8"我是UTF8");
u16string u16strr(u"我是UTF16");
u32string u32strr(U"我是UTF32");
不過經驗證,wstring、u16string、u32string並沒有重載 << 、>>等運算符。