新的 C++11 标准提到了一个标头<cuchar>
,大概类似于 C99 的<uchar.h>
.
现在,我们知道 C++11 带来了新的字符类型和文字是专门为 UTF16 和 UTF32 设计的,但我认为该语言实际上不会包含将(依赖于系统的)窄多字节编码转换为其中一种 Unicode 编码的函数。然而,我刚刚发现了标题概要<cuchar>
提到功能mbrtoc16
/c16rtombr
and mbrtoc32
/c32rtombr
似乎就是这么做的。
不幸的是,除了标头概要之外,该标准对这些函数只字未提。这些函数在哪里定义的,它们的真正作用是什么,我在哪里可以阅读有关它们的更多信息?这是否意味着现在可以完全通过标准 C++ 使用正确的 Unicode,而不需要任何额外的库?
这些在一个2005 年的 WG21 论文但最终标准中并未出现该描述。它们记录在 ISO/IEC 19769:2004 中(编程语言 C 的扩展以支持新的字符数据类型) (draft),C++11 标准引用的。
文字太长,无法在这里发布,但这些是签名:
size_t mbrtoc16(char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
size_t c16rtomb(char * s, char16_t c16, mbstate _t * ps);
size_t mbrtoc32(char32_t * pc32, const char * s, size_t n, mbstate_t * ps);
size_t c32rtomb(char * s, char32_t c32, mbstate_t * ps);
这些函数分别在多字节字符和 UTF-16 或 UTF-32 字符之间进行转换,类似于mbrtowc
。没有不可重入的版本,老实说,谁需要它们?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)