流、stream_bufs、编解码器 FACETS 和 到 r 转换

streams, stream_bufs, codecvt facets and to translation

本文关键字:转换 FACETS 编解码器 stream bufs      更新时间:2023-10-16

r rn转换C++ IO 流的哪一部分?是stream_buf本身,还是codecvt方面内部到外部编码转换的一部分?

更新 1

你们都说它是在streambuf/filebuf中完成的。好的。但是这种安排如何处理,例如,像UTF-16这样的外部编码?然后似乎必须使用禁用翻译ios::binary标志打开文件。

此转换(通常)不是由流、流或分面执行的。这是 C 库代码的责任(例如 fputc())被Streambuf的overflow()underflow()所称。

如果你出于某种原因需要它(例如,在实现dos2unix例程时),boost.iostreams中有一个方便的例子。

编辑:std::filebuf仅支持文本文件的多字节编码,例如UTF-8或GB18030或任何语言环境使用的内容。UTF-16 文件必须以二进制模式打开,作为纯字节流(可以解释为 UTF-16 与 C++11 的编解码器工具),是的,行尾不会被转换。

IFAIR 它是在 streambuf 实现中完成的,codecvt只处理区域设置表示细节。

它由 std::filebuf 执行,如果它是在没有 ios::binary 标志的情况下打开的。