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
2
3
4
经以上代码测试,这三个数据类型的大小为: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";
1
2
3
4
其中: 
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;
1
2
3
实现举例:

    wstring wstrr(L"我是宽字符字符串");
    string u8strr(u8"我是UTF8");
    u16string u16strr(u"我是UTF16");
    u32string u32strr(U"我是UTF32");
1
2
3
4
不过经验证,wstring、u16string、u32string并没有重载 << 、>>等运算符。
--------------------- 
作者:thinkerleo7798 
来源:CSDN 
原文:https://blog.csdn.net/thinkerleo1997/article/details/78534741 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值