是否有一个codecvt解码方案,目标缓冲区需要多个内部字符的空间?
问题描述:
当使用std::codecvt
的in
方法将外部字节序列解码为内部字符序列时,是否存在内部字符的目标缓冲区需要多个内部字符的空间的情况?是否有一个codecvt解码方案,目标缓冲区需要多个内部字符的空间?
下面是参考一些代码:
// const std::locale& loc;
// mbstate_t state;
// const char *extern_buf_ptr;
// const char *extern_buf_eptr;
const std::codecvt<wchar_t, char, mbstate_t> *pcodecvt = &std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >(loc);
wchar_t intern_char;
wchar_t *tmp;
std::codecvt_base::result in_res = pcodecvt->in(state,
extern_buf_ptr, extern_buf_eptr, extern_buf_ptr,
&intern_char, &intern_char + 1, tmp);
这是我写解码来自一个Winsock SOCKET
,其中用户期望“非缓冲”输入分别读取的字节一些模板代码的简化。基本上,每循环一次,一个字节被读入外部缓冲区。当in_res
不是std::codecvt_base::partial
时,循环终止。
我想知道的是:是否有一个场景,in()
的呼叫将需要目标缓冲区中的多个内部字符空间?也就是说,是否有一种情况会使上述循环成为无限循环?
答
有一个音符§22.4.1.4.2/3
到这样的程度:
basic_filebuf
假定从内部到外部字符映射为1
到N
:所使用的basic_filebuf
必须能够转换角色一个内部一个codecvt
面字符在一个时间
听起来像任何语言环境,这对于IO流很好,也适合您的使用。
+0
这正是我需要知道的。谢谢。 –
请注意,'wchar_t'被定义为足够宽以容纳“系统字符集”的任何字符值。因此,假定任何'wchar_t'字符串序列都需要一个接一个地处理是合理的。 –