新的C ++ 11标准提到了一个标题<cuchar>
,大概类似于C99的<uchar.h>
。
现在,我们知道C ++ 11带来了专为UTF16和UTF32设计的new character types and literals,但我认为该语言实际上不包含转换(依赖于系统的)窄多字节编码的函数到其中一个Unicode编码。但是,我刚刚看到了<cuchar>
的标题摘要,其中提到的函数mbrtoc16
/ c16rtombr
和mbrtoc32
/ c32rtombr
似乎就是这样做的。
不幸的是,标准没有提到标题概要之外的那些功能。这些功能在哪里定义,他们真正做了什么,在哪里可以阅读更多关于它们的内容?这是否意味着现在可以使用标准C ++完全使用适当的Unicode,而无需任何额外的库?
答案 0 :(得分:6)
这些在WG21 paper from 2005中描述,但最终标准中没有描述。它们在ISO / IEC 19769:2004(用于支持新字符数据类型的编程语言C的扩展)(draft)中进行了记录,这是C ++ 11标准所引用的。 / p>
文字太长,无法在此发布,但这些是签名:
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
。没有非重入版本,老实说,谁需要它们?
答案 1 :(得分:1)
我所知道的最好的文档可能是n1326,将TR19769添加到C标准库的提议[编辑:虽然看着它,R。Martinho Fernandes引用的N1010似乎有几乎一样]。