[英]streams, stream_bufs, codecvt facets and \n to \r\n translation
哪一部分C ++的IO流是否\\r
以\\r\\n
转换? 它是stream_buf
本身还是由codecvt
facet进行内部到外部编码转换的codecvt
?
更新1
你们都说它是在streambuf / filebuf中完成的。 好。 但是这种安排如何处理,例如像UTF-16这样的外部编码? 然后似乎必须用ios::binary
标志打开文件,这会禁用翻译。
此转换(通常)不是由stream,streambuf或facet执行的。 由streambuf的overflow()
和underflow()
调用的C库代码(例如fputc()
)是责任。
如果由于某种原因需要它(例如,在实现dos2unix例程时), boost.iostreams中有一个方便的例子。
编辑: std::filebuf
仅支持文本文件的多字节编码,例如UTF-8或GB18030或者语言环境使用的任何编码。 UTF-16文件必须以二进制模式打开,作为普通字节流(可以用C ++ 11的codecvt工具解释为UTF-16),是的,行结尾不会被转换。
IFAIR在streambuf实现中完成, codecvt
只处理区域设置表示细节。
它由std :: filebuf执行,如果它是在没有ios :: binary标志的情况下打开的话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.