wprintfで日本語が正しく出力されない – プログラミング – Home

wprintfで日本語が正しく出力され...
 
通知
すべてクリア

[解決済] wprintfで日本語が正しく出力されない


K
 K
(@K)
ゲスト
結合: 23年前
投稿: 98
Topic starter  

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

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

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

OS: Windows XP SP2


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

localeはちゃんと設定しましたか?


返信引用
yoh2
 yoh2
(@yoh2)
ゲスト
結合: 18年前
投稿: 70
 

もひとつ、ありがちな失敗例として。
_tprintf()の前に単なるprintf()を呼び出したりしていませんか?
ひとつのストリーム(この場合はstdout)では、どちらか片方だけしか使えません。


返信引用
FUKU
 FUKU
(@FUKU)
ゲスト
結合: 17年前
投稿: 73
 

_tsetlocale(LC_ALL, _T(")); // これが必要では?


返信引用
K
 K
(@K)
ゲスト
結合: 23年前
投稿: 98
Topic starter  

みなさん、回答ありがとうございます。

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

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

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


返信引用
8h4722c441
 8h4722c441
(@8h4722c441)
ゲスト
結合: 17年前
投稿: 2
 

hy1r1qi1p25x6lx5l http://www.644938.com/513290.html ve04c4jbldkb


返信引用
8h4722c441
 8h4722c441
(@8h4722c441)
ゲスト
結合: 17年前
投稿: 2
 

hy1r1qi1p25x6lx5l 71sdhokpgtwg12o ve04c4jbldkb


返信引用
8fmlvuf0ib
 8fmlvuf0ib
(@8fmlvuf0ib)
ゲスト
結合: 17年前
投稿: 2
 

gelqa0bwd8hn http://www.1078144.com/815997.html 0hsfj4nc


返信引用
8fmlvuf0ib
 8fmlvuf0ib
(@8fmlvuf0ib)
ゲスト
結合: 17年前
投稿: 2
 

gelqa0bwd8hn iil95t954xh0tvaz 0hsfj4nc


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

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

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました