C++中的Unicode編碼:wchar, UTF-8,UTF-16,UTF-32

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並沒有重載 << 、>>等運算符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章