streams,stream_bufs,codecvt facets和\n到\ r \n的翻译

wil*_*ilx 5 c++ iostream streambuf codecvt

\r\r\n转换的C++ IO流的哪一部分?它stream_buf本身还是由codecvtfacet 进行内部到外部编码转换的一部分?

更新1

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

Cub*_*bbi 2

此转换(通常)不是由stream、streambuf 或facet 执行的。由streambuf和fputc()调用的C 库代码(例如)负责。overflow()underflow()

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

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