……また VS2005 ぉー? もー… orz
UNICODE ビルドを行ってますので、cout は利用せずに wcout を利用する事になります。 で、日本語文字列が上手く出力されないという問題に遭遇してまして「あー、"japanese" に locale 設定せにゃあきませんか」と気づいた訳です。
今までのアプリは、ぶっちゃけ wcout なんて使う事無かったので^^; ::_tsetlocale(LC_ALL, _T("japanese")) == C言語の領域 で事足りてたのですが、今回は ストリームですので、C++の領域も設定してあげなくてはいけません。
というわけで、
// 全体へ設定を反映する std::locale::global(std::locale("japanese"));
なんて打って、全体へ設定を反映させてみようと試みてみたのですが…何も表示されなくなってしまいました。 …はて? 何故かしら〜…?
グローバル変数として存在している wcout は main が始まる前に(コンストラクタで)初期化が完了している故に、後から設定した local の値とトラブル起こしてるのかしらー?
ということで
// ストリーム個別の設定を行う std::wcout.imbue(std::locale("japanese"));
なんてしてみたのですが、やっぱり文字が表示されない… うーん、何故?
そもそも、locale なんて オブジェクトは使った事無いわ、iostream 系もよく知らない状態なので、ぶっちゃけ何が原因なのか特定できない状態だったりするのです。 個人的には、オブジェクトの使い方間違ってるんだろうなー……なんて思って、MSDNなりネットなりで調べていたのですがー……
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=250724&SiteID=7
Visual Studio 2005 Pro + windows XPの環境でざっくりコードを追ってみたのですが、ライブラリのバグっぽいですね・・・。
ぎ ゃ ふ ん !
結論としては、std::locale::global(std::locale("japanese")); を行っては いけないらしい です。
…って、そりゃーねーだろうよ、Microsoft さんよ……。 6時間ぐらいを返せ… =■●_
なんつーか、VS2005 は全体的におかしいよ…
追記
wofstream を利用した所、日本語出力の挙動がなんかおかしいです… orz
locale 設定してもしなくても結果が変わらないとかいう謎の状態に…
んもー…… orz
↑これは問題解消しました。いつのまにか。^^;
何が原因なのかイマイチわかりませんが、何かしら私の使い方が悪かったようです…