簡體   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