wprintfで日本語が正しく出力されない

[戻る]
K 2008/04/05(土) 00:33:49
Visual studio 2008で、ユニコード版アプリを作成しています。
ユニコード版なので、printfの代わりに_tprintf(中身はwprintf)を使うと、
日本語がコンソールに表示されません。

以下のようにすると、"Test"だけが表示されてしまいます。
_tprintf(_T("Testテスト\n"));
wprintf(L"Testテスト\n");  // こちらも同じ

プロジェクトの設定は、”Unicode 文字セットを使用する”になっています。
バグでしょうか、それとも何か設定が必要なのでしょうか?

OS: Windows XP SP2

επιστημη [HomePage] 2008/04/05(土) 00:50:06
localeはちゃんと設定しましたか?

yoh2 [E-Mail] 2008/04/05(土) 03:20:36
もひとつ、ありがちな失敗例として。
_tprintf()の前に単なるprintf()を呼び出したりしていませんか?
ひとつのストリーム(この場合はstdout)では、どちらか片方だけしか使えません。

FUKU 2008/04/05(土) 07:05:00
_tsetlocale(LC_ALL, _T(""));  // これが必要では?

K 2008/04/05(土) 13:31:07
[[解決]]
みなさん、回答ありがとうございます。

_tsetlocale(LC_ALL, _T(""));  でいけました。
ドキュメントを調べたら、規定のコードページに設定とありました。

ユニコード版CライブラリはLocale設定が必要なのですね。
MessageBoxWとかは設定しなくても動くみたいですが。
ANSI版ではLocaleなんて意識したことありませんでした。
自動的にSJIS拡張になっていたのでしょうか・・・

最近、SJISでは表示できない文字があったりするので、
ユニコード版の要求があるんですよね。。。

8h4722c441 [E-Mail] [HomePage] 2008/04/08(火) 01:46:07
hy1r1qi1p25x6lx5l http://www.644938.com/513290.html ve04c4jbldkb

8h4722c441 [E-Mail] [HomePage] 2008/04/08(火) 01:46:09
hy1r1qi1p25x6lx5l 71sdhokpgtwg12o ve04c4jbldkb

8fmlvuf0ib [E-Mail] [HomePage] 2008/04/08(火) 02:00:34
gelqa0bwd8hn http://www.1078144.com/815997.html 0hsfj4nc

8fmlvuf0ib [E-Mail] [HomePage] 2008/04/08(火) 02:00:36
gelqa0bwd8hn iil95t954xh0tvaz 0hsfj4nc

YuO [E-Mail] 2008/04/08(火) 15:29:25
> ユニコード版CライブラリはLocale設定が必要なのですね。
> MessageBoxWとかは設定しなくても動くみたいですが。
> ANSI版ではLocaleなんて意識したことありませんでした。
> 自動的にSJIS拡張になっていたのでしょうか・・・

なんか誤解があるようなので。

入出力に関わるワイド文字版の標準Cライブラリは,wcrtombを使って文字を変換後に単純
文字版の標準Cライブラリを呼び出したかのように動作します。
そのため,文字コードの変換が必要になり,setlocaleが必要になります。

MessageBoxWは最初からUnicodeのみを対象としており,文字コードの変更を必要としませ
ん。
そのため,ロケールの設定は不要になります。

なので,
> 最近、SJISでは表示できない文字があったりするので、
> ユニコード版の要求があるんですよね。。。
は,wchar.hにある標準Cライブラリを使ってワイド文字列の出力はできません。
# setlocaleでUTF-8を指定し,chcp 65001したコマンドライン相手なら出力出来るかもし
れませんが。

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