Locale:标准库字符编码转换概览.(从C++17开始弃用)

C++标准库也提供了字符转换的工具:

但是只要要求可以实现以下几种转换,需要注意的事这些都是针对std::codecvt的特例化版本.

std::codecvt<char, char, std::mbstate_t> : 该版本的一般用于 UTF-8和ASCII(8bit)之间的转换.

std::codecvt<char16_t, char, std::mbstate_t>: 该版本的一般用于 UTF-16和UTF-8之间的转换.

std::codecvt<char32_t, char, std::mbstate_t>: 该版本的一般用于 UTF32和UTF-8之间的转换.

std::codecvt<wchar_t, char, std::mbstate_t>: 该版本的一般用于当前系统原生的wchar_t字符集多字节字符集(multibyte characterset)之间的转换.

std::codecvt是依赖std::locale的,如果你使用的当前标准库有实现对对扩展字符集(Extented UNIX Code)的支持那么我们可以很容易使用std::codecvt转换进行 Unicode字符集扩展字符集之间的转换.

 

在此之前我们需要了解一个 trivial-class:std::mbstate_t这个类很特殊,例如----采用multibyte编码的时候,在这种情况下在处理一个字符的时候,可能由于“源缓冲区”已经空了,或者目标缓冲区满了造成multibyte字符处理中断。如果这种情况出现将当前转换状态存储到此类对象内.

 

在了解std::codecvt之前我们需要再明确一个概念:

源缓冲区:  存储需要被转换的字符的区域.

目标缓冲区:存储已经被转换的字符的区域.

 

当从 wchar_t到char的时候:

会将每个wchar_t切割为 sizeof(wchar_t)个char对象.

当从char到wchar_t的时候:

会用sizeof(wchar_t)个char组装成一个char.

因此无论是下面的in()操作还是out()操作都只是切割或者组装操作,并不是到直接的把一个其他字符集的字符映射到当前字符集(反之亦然).

 

其中有几个函数返回值为:

std::co

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值