アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストファイルに全角文字を出力したのですがなぜか出力するとテキストファイルには???と出力されてしまいます。
どうしたらちゃんと出力されるでしょうか?
#include<windows.h>
#include<TCHAR.h>
int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hprevInst,LPTSTR nCmdLine,int nCmdShow)
{

FILE* fp;

fp=_wfopen(_T("takoyaki.txt"),_T("w"));
if(fp==NULL)
{
MessageBox(NULL,_T("ファイルが開きません"),_T("エラー"),MB_OK);
}
fwprintf(fp,_T("%s"),_T("おはよう。"));
return 0;
}


環境はWinXP pro、
開発環境はVC++2005です。
よろしくお願いします。

A 回答 (2件)

単純にテキストファイルの確認方法がUnicodeに対応していないだけという可能性もあります。

古いテキストエディタだとシフトJISにしか対応していない場合がありますから。あるいは文字コードの種類が判別できていないだけの可能性もあります。
VC++2005だとデフォルトではUTF16のコードを出力するので、UTF16に対応したテキストエディタ等でないと文字化けします。
    • good
    • 0

ロケールをセットしていないためだと思います。


(「何語を使いますよ~」と宣言するようなものです)
Unicodeを使う場合はその必要があります。
以下を書き加えてください。


#include <locale.h>

及び

_tsetlocale(LC_ALL, _T("japanese"));



それで可能になると思いますが
_T("")マクロはUnicodeのときはそれようにL""と展開されマルチバイトの時は""と展開されますので、この意味を本当に通すなら

同じく両方対応するように

_wfopen  → _tfopen

fwprintf → _ftprintf

などとするのがベストです。
(こうしないとマルチバイト文字を使う設定に直した場合全部手直ししないといけなくなります)

この、両対応の
それぞれの関数(実際にはこれらもマクロ)の名前は

MSDNをみて

_wfopen→_tfopenなら
http://msdn.microsoft.com/ja-jp/library/yeby3zcb …

こちらのページになりますが、真ん中あたりの

『汎用テキスト ルーチンのマップ』
という欄を見ればわかるようになっています。

fwprintf → _ftprintfも同じです。
http://msdn.microsoft.com/ja-jp/library/xkh07fe2 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!