Unicode文字列がコンソールへ正常出力されない

[戻る]
Takahashi 2004/10/28(木) 17:24:02
環境 Windows XP(SP1), VC .NET2003, コンソールアプリ

構成プロパティ−全般−Unicode 文字セットを使用するで
unicode 指定 (_UNICODE) しております。

以下のプログラムで、正常に文字列が出力されない現象に悩んでおります。

#include "stdafx.h"

#include <iostream>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <windows.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    string str1 = "testテスト";
    wstring str2 = L"testテスト";

    cout << str1 << endl;
    wcout << str2 << endl;

    printf("%s\n", str1.c_str());
    wprintf(L"%s\n", str2.c_str());

    OutputDebugString(str2.c_str());

    getch();
    return 0;
}

コンソール出力:

testテスト
testtestテスト
test

デバッガ出力:

testテストプログラム '[2936] test.exe: ネイティブ' はコード 0 (0x0) で終了しま
した。

上記出力のように unicode で "テスト" がコンソールへ全く表示されません。
(endl, \n も効いていない・・・)
試しにブレークポイントを終了前に仕掛け、str2 の中身(string の バッファ)を
見てみると当然の事ながら "testテスト" が unicode で格納されていました。
また、SDK の OutputDebugString は正常に出力されました。

今回初めて本格的に unicode を使用したもので、
何が悪いのか全く見当がつかない状態です。
みなさま、ご指摘よろしくお願いいたします。

# ちなみに MFC で TRACE マクロも使えませんでした・・・

επιστημη [E-Mail] [HomePage] 2004/10/28(木) 17:34:16
#include <locale> を追加し、

_tmainに入ったらいきなり、

  locale::global(locale("japanese"));

してみて。

Takahashi 2004/10/28(木) 20:19:43
[[解決]]
επιστημη さんレスありがとうございます。

locale::global(locale("japanese"));

を入れたら一発で動きました!(感謝です)

locale について調べてわかったのですが setlocale の C++ 版なんですね
ためしに setlocale(LC_CTYPE, "japanese");
としても動作することを確認できました。
とても勉強になります。
# ちなみに setlocale なんて1回も使ったことないです・・・

調子に乗って STLport に切り替えたら文字化けが・・・
こちらは自分で調べてみます。

毎回ながら初歩的な質問でお騒がせしました。
επιστημη さんどうもありがとうございました。

# あと、TRACE が使えないって書きましたけど普通に使えました。
# なんで使えないって思ったんだろうか・・・(^_^;

古いスレッドには追加発言できません。