c32语言,c32rtomb转换为什么编码?

bames53..

10

为了保证断言保持为真,所使用的多字节编码c32rtomb()必须与用于字符串文字的编码相同,至少就字符串中实际使用的字符而言.

C99 7.11.1.1/2指定setlocale()类别LC_CTYPE会影响字符处理函数的行为以及多字节和宽字符函数.我没有看到任何明确的确认,即效果是设置所使用的多字节和宽字符编码,但这是意图.

因此,使用c32rtomb()的多字节编码是默认"C"语言环境中的多字节编码.

C++ 11 2.14.3/2指定执行编码,宽执行编码,UTF-16和UTF-32用于相应的字符和字符串文字.因此,std::string narrow使用执行编码来表示该字符串.

那么这个字符串的"C"语言环境编码与该字符串的执行编码相同吗?

C99 7.11.1.1/3指定"C"语言环境为C语言翻译提供"最小环境".这样的环境不仅包括字符集,还包括使用的特定字符代码.所以我认为这不仅意味着"C"语言环境必须支持翻译中所需的字符(即基本字符集),而且"C"语言环境中的那些字符必须使用相同的字符代码.

字符串文字中的所有字符都是基本字符集的成员,因此将char32_t表示转换为char"C"语言环境表示必须生成与编译器为char字符串文字生成的值相同的值序列.断言必须成立.

我没有看到任何建议在执行编码和"C"语言环境之间以兼容的方式支持基本字符集之外的任何内容,因此如果你的字符串文字使用了基本字符集之外的任何字符,那么就不会有任何字符集.保证断言会成立.即使规定了执行字符集和"C"语言环境中都存在的扩展字符,我也没有看到表示相互匹配的要求.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值