5

C ++ IOストリームのどの部分\r\r\n変換しますか?それ自体ですか、それともファセットstream_bufによる内部から外部へのエンコーディング変換の一部ですか?codecvt

更新1

あなたは皆、それがstreambuf/filebufで行われると言います。Ok。しかし、この配置は、たとえばUTF-16のような外部エンコーディングをどのように処理しますか?ios::binary次に、翻訳を無効にするフラグを付けてファイルを開く必要があるようです。

4

3 に答える 3

2

この変換は、(通常)stream、streambuf、またはファセットによって実行されません。fputc()streambufと​​によって呼び出されるのはCライブラリコード(例)overflow()の責任underflow()です。

何らかの理由で必要な場合(たとえば、dos2unixルーチンを実装する場合)、boost.iostreamsに便利な例があります。

編集:std::filebufテキストファイルのマルチバイトエンコーディングのみをサポートします。たとえば、UTF-8やGB18030、またはロケールが使用するものは何でも。UTF-16ファイルは、プレーンバイトストリーム(C ++ 11のcodecvt機能を備えたUTF-16として解釈できます)としてバイナリモードで開く必要があります。そうすると、行末は変換されません。

于 2012-06-06T22:20:52.347 に答える
1

IFAIRはstreambuf実装で行われcodecvt、ロケール表現の詳細を処理するだけです。

于 2012-06-06T22:10:15.723 に答える
1

ios :: binaryフラグなしで開かれている場合は、std::filebufによって実行されます。

于 2012-06-06T22:43:32.210 に答える