繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM