私は現在、任意のウィンドウでGetWindowTextを呼び出し、後で処理するためにそのデータをファイルに保存する必要があるアプリケーションを作成しています。簡単に言うと、バトルフィールド3でツールが失敗していることに気付き、ウィンドウタイトルの次の文字に問題を絞り込みました: http://www.fileformat.info/info/unicode/char/2122/index。 htm
そこで、次のことを実行する小さなテストアプリを作成しました。
std::wcout << L"\u2122";
低く、プログラムの残りの部分でコンソールウィンドウへの出力が途切れるのを見てください。
MessageBoxWなどのAPIが問題なく表示するのに、なぜMSVC STLがこの文字(および他の文字を想定)を窒息させるのですか?
これらの文字をファイルに印刷するにはどうすればよいですか?
Windows7x64のVC10とVC11の両方でテストされています。
ポストの構成が不十分で申し訳ありませんが、ここで髪を引き裂いています。
ありがとう。
編集:
最小限のテストケース
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
期待される結果:「™」文字がコンソールとファイルに出力されます。観察結果:ファイルは作成されましたが、空です。コンソールへの出力はありません。
コンソールに使用しているフォントが問題の文字を表示できることを確認しました。ファイルは完全に空です(サイズは0バイト)。
編集:
さらにデバッグすると、「failbit」と「badbit」がストリームに設定されていることがわかります。
編集:
また、Boost.Localeを使用してみましたが、すべての標準ストリームにグローバルかつ明示的に組み込まれた新しいロケールでも同じ問題が発生しています。