Visual studio 2008で、ユニコード版アプリを作成しています。
ユニコード版なので、printfの代わりに_tprintf(中身はwprintf)を使うと、
日本語がコンソールに表示されません。
以下のようにすると、Testだけが表示されてしまいます。
_tprintf(_T(Testテスト\n));
wprintf(LTestテスト\n); // こちらも同じ
プロジェクトの設定は、”Unicode 文字セットを使用する”になっています。
バグでしょうか、それとも何か設定が必要なのでしょうか?
OS: Windows XP SP2
localeはちゃんと設定しましたか?
もひとつ、ありがちな失敗例として。
_tprintf()の前に単なるprintf()を呼び出したりしていませんか?
ひとつのストリーム(この場合はstdout)では、どちらか片方だけしか使えません。
_tsetlocale(LC_ALL, _T(")); // これが必要では?
みなさん、回答ありがとうございます。
_tsetlocale(LC_ALL, _T(")); でいけました。
ドキュメントを調べたら、規定のコードページに設定とありました。
ユニコード版CライブラリはLocale設定が必要なのですね。
MessageBoxWとかは設定しなくても動くみたいですが。
ANSI版ではLocaleなんて意識したことありませんでした。
自動的にSJIS拡張になっていたのでしょうか・・・
最近、SJISでは表示できない文字があったりするので、
ユニコード版の要求があるんですよね。。。
hy1r1qi1p25x6lx5l 71sdhokpgtwg12o ve04c4jbldkb
gelqa0bwd8hn iil95t954xh0tvaz 0hsfj4nc
> ユニコード版CライブラリはLocale設定が必要なのですね。
> MessageBoxWとかは設定しなくても動くみたいですが。
> ANSI版ではLocaleなんて意識したことありませんでした。
> 自動的にSJIS拡張になっていたのでしょうか・・・
なんか誤解があるようなので。
入出力に関わるワイド文字版の標準Cライブラリは,wcrtombを使って文字を変換後に単純
文字版の標準Cライブラリを呼び出したかのように動作します。
そのため,文字コードの変換が必要になり,setlocaleが必要になります。
MessageBoxWは最初からUnicodeのみを対象としており,文字コードの変更を必要としませ
ん。
そのため,ロケールの設定は不要になります。
なので,
> 最近、SJISでは表示できない文字があったりするので、
> ユニコード版の要求があるんですよね。。。
は,wchar.hにある標準Cライブラリを使ってワイド文字列の出力はできません。
# setlocaleでUTF-8を指定し,chcp 65001したコマンドライン相手なら出力出来るかもし
れませんが。