[トピック内 5 記事 (1 - 5 表示)] << 0 >>
■No30586 (dogatana さん) に返信 #include <iostream> using namespace std; int main() { std::locale::global(std::locale("")); cout << "あいうえお" << endl; } VC2005はロケール周りにバグがあるのでそのせいかもしれません。 2005ではcoutでたしかに表示されませんでした。(ロケールの行をなくすと表示される) 2008ではうまくいきました。
ちゃっぴさん、アキラさん、あしびさん、ご助言ありがとうございます。 ■No30591 (あしび さん) に返信 > 同じ問題にはまったことのある人間です。 > 皆さんのおっしゃっていられるようにバグとUnicode関係の混合攻撃でした。 > ものすごくいろんなことにはまった末,std:localeではなく、Cのsetlocaleを使うことで回避しました。 状況が ・扱うファイルのデータはシフトJISのデータであること(Unicodeへの変換はちょっと) ・プログラム内の文字列リテラルに、Lをつけて回るのが面倒なこと ^^; ・プログラム内のcoutをwcoutに書き換えるのも面倒なこと ^^;; ・問題はifsreamが受け付けるファイル名だけである(らしい)こと から、何とか今までのプログラムをそのまま使えないかと色々試したところ std::locale::global(std::locale("")); std::ifstream ifs(argv[1]); std::locale::global(std::locale("C")); と、ifstreamのインスタンスを生成する前後にロケールの設定を行うことで回避できることがわかりました。 今のところ、問題なく動作してますので、ひとまずこれで進めたいと思います。 ただアキラさんの書き込みを見ると、VC2008に変えるのが一番良さそうですね。 ありがとうございました。
管理者用
- Child Tree -