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

标签 c++ character-encoding codecvt

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

这里有一些代码供引用:

// 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 assumes that the mappings from internal to external characters is 1 to N: a codecvt facet that is used by basic_filebuf must be able to translate characters one internal character at a time

听起来任何适合 IO 流的语言环境也适合您的使用。

关于c++ - 是否存在目标缓冲区需要多个内部字符空间的 codecvt 解码方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234888/

相关文章:

javascript - boost::asio 是否支持 websockets?

c++ - std::ranges 中是否有谓词适配器/构建器?

php - 将 xml 提要导入 MySQL 数据库时替换特殊字符

c++ - 专门化 codecvt:当第三个模板参数不是 std::mbstate_t 时出现链接器错误

c++ - crt0 是否加载 msvcrt.dll?

C++(函数、余弦)没有给出正确答案

php - 如何修复 laravel Seed 中的 UTF8?

php - preg_match 和(非英语)拉丁字符?

c++ - 流、stream_bufs、codecvt 方面和\n 到\r\n 翻译