是否存在codecvt解码方案,其中目标缓冲区需要多个内部字符的空间?

时间:2011-11-22 22:36:26

标签: c++ character-encoding codecvt

当使用std::codecvt的{​​{1}}方法将外部字节序列解码为内部字符序列时,是否存在内部字符的目标缓冲区需要多个内部字符空间的情况?

以下是一些供参考的代码:

in

这是我编写的一些模板代码的简化,用于解码从Winsock // 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); 单独读取的字节,用户希望“无缓冲”输入。基本上,随着循环的每次迭代,一个字节被读入外部缓冲区。当SOCKET不是in_res时,循环终止。

我想知道的是:是否存在对std::codecvt_base::partial的调用需要在目标缓冲区中为多个内部字符留出空间的情况?即,是否存在使上述循环成为无限循环的情景?

1 个答案:

答案 0 :(得分:3)

§22.4.1.4.2/3中有一个注释:

  

basic_filebuf假设从内部字符到外部字符的映射为1Ncodecvt使用的basic_filebuf方面必须能够一次翻译一个内部字符

听起来像任何适合IO流的区域设置都适合您的使用。