本文共 989 字,大约阅读时间需要 3 分钟。
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_stringstring; typedef basic_string u16string; typedef basic_string u32string;
实现举例:
wstring wstrr(L"我是宽字符字符串"); string u8strr(u8"我是UTF8"); u16string u16strr(u"我是UTF16"); u32string u32strr(U"我是UTF32");
不过经验证,wstring、u16string、u32string并没有重载 << 、>>等运算符。
转载地址:http://lxoli.baihongyu.com/