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