3

私は、ASCII、UTF8、UTF16、UTF32 文字列を処理する主要な 4 つのクラスを持つ c++ 文字列ライブラリに取り組んでいます。すべてのクラスには、入力文字列をフォーマットし、結果を stdout または stderr に出力する Print 関数があります。私の問題は、これらのストリームのデフォルトの文字エンコーディングがわからないことです。

今のところ、私のクラスは Windows で動作します。後で、Mac と Linux のサポートを追加する予定です。これらのストリーム エンコーディングについて何かご存知でしたら、よろしくお願いします。

だから私の質問は: stdout と stderr のデフォルトのエンコーディングは何ですか?後でそのエンコーディングを変更できますか?もしそうなら、そこに保存されているデータはどうなりますか?

ありがとうございました。

4

2 に答える 2

4

stdout と stderr は「C」ロケールを使用します。"C" ロケールは基本的なものであり、ほとんどのシステムでは現在のユーザーのロケールに変換されます。setlocale関数を使用して、プログラムに特定のロケールを使用させることができます。

// Set all categories and return "English_USA.1252"
setlocale( LC_ALL, "English" );
// Set only the LC_MONETARY category and return "French_France.1252"
setlocale( LC_MONETARY, "French" );
setlocale( LC_ALL, NULL );

サポートされるロケール文字列は、システムおよびコンパイラ固有です。サポートが必要なのは「C」と「」のみです。

http://www.cplusplus.com/reference/clibrary/clocale/

于 2010-05-18T13:48:18.743 に答える
0

このSOの回答(最も支持された回答)をご覧ください。

これはまさにあなたの質問ではありませんが、確かに関連しており、多くの有用な情報を提供します.

私はここでは専門家ではありませんが、使用するstd::coutたびに使用する必要があると推測できます。std::stringstd::wcoutstd::wstring.

于 2010-05-18T12:40:39.583 に答える