タグ

c++とlocaleに関するcrafのブックマーク (1)

  • VC8のfilebufとsetlocale - かそくそうち

    今日はライブラリの作業を進める気分ではなかったので、前々から気になっていた、VC8のstd::filebufがstd::setlocale()を呼ばないと動かない問題と、std::setlocale()を呼ぶと標準出力/エラー出力がおかしくなる問題について調べてみました。 原因に関してはこんな感じでした。 std::filebufのファイル名がCのロケールに従ってワイド文字に変換される ↓ Cのロケールを変更するためにstd::setlocale()を呼ぶことになる ↓ Cのロケールが"C"以外になると、ファイルポインタへの書き込みで、ワイド文字経由でコンソールのコードページへの変換が発生する ↓ 既定ではstdoutやstderrがバッファリングなしの設定なので、マルチバイト文字のリーディングバイトだけでワイド文字に変換しようとして失敗する ↓ 書き込みに失敗したため、std::file

    VC8のfilebufとsetlocale - かそくそうち
  • 1