環境 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 = Ltestテスト;
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 マクロも使えませんでした・・・
#include <locale> を追加し、
_tmainに入ったらいきなり、
locale::global(locale(japanese));
してみて。
επιστημη さんレスありがとうございます。
locale::global(locale(japanese));
を入れたら一発で動きました!(感謝です)
locale について調べてわかったのですが setlocale の C++ 版なんですね
ためしに setlocale(LC_CTYPE, japanese);
としても動作することを確認できました。
とても勉強になります。
# ちなみに setlocale なんて1回も使ったことないです・・・
調子に乗って STLport に切り替えたら文字化けが・・・
こちらは自分で調べてみます。
毎回ながら初歩的な質問でお騒がせしました。
επιστημη さんどうもありがとうございました。
# あと、TRACE が使えないって書きましたけど普通に使えました。
# なんで使えないって思ったんだろうか・・・(^_^;