ページ 11

ファイルの出力で文字化けする

Posted: 2009年3月01日(日) 23:30
by 脱出の人
何回もすいません。脱出の人です。
txtファイルに文字を書きたいんですが。(もちろんc言語で)
"%d,"の文で文字化けするみたいなんです。
スペースを入れると大丈夫なんですが、スペースを入れると邪魔なのでどうしたらいいでしょうか?
"%d ,"
重要そうな所だけ書いてみます。
for(i=0;i<480;i++)
  for(j=0;j<640;j++)
	tairu[j]=0;

void Save1(void){
	FILE *fp;
	
	fp = fopen( "MAP.txt", "w" );
	if( fp == NULL );
	for(i=0;i<480;i++){
		fprintf( fp, "{ " );
		for(j=0;j<639;j++){
            //ここを入れると文字化けする
			fprintf( fp, "%d,",tairu[j] );
		}
		fprintf( fp, "%d },\n",tairu[j] );
	}
	fclose( fp );
}

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 00:06
by SooA
%dと','の間に'\'を入れてみてください。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 00:15
by 脱出の人
やってみましたが文字化けしてしまいます。
ちなみに文字化けの内容ですが。
&#8315;&#11312;&#11312;&#11312;(同じ文字が大量に)&#11312;&#11312;&#11312;‰&#11389;&#2573;
↑この文の繰り返しです。多分480回?
FILE *fp;
	
	fp = fopen( "MAP.txt", "w" );
	if( fp == NULL );
	for(i=0;i<480;i++){
		fprintf( fp, "{ " );
		for(j=0;j<639;j++){
			//ここを消すと
                        //fprintf( fp, "%d\,",tairu[j] );
		}
		fprintf( fp, "%d },\n",tairu[j] );
	}
	fclose( fp );

ちゃんと表示され
{ 0 },
が480個(多分)
スペース挟むしかないんですかね?

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 00:26
by SooA
すみません、あまりよく見てなかったんで^^;
一応こちらで試してみたソースです。
文字列中の { } , の前に \ を入れてあります。
int i, j;
	char tairu[480][640];

	for( i=0;i<480;i++)
		for( j=0;j<640;j++)
			tairu[j] = 0;

	FILE *fp;
	
	if( ( fp=fopen( "MAP.txt", "w" ) ) != NULL ){
		for(i=0;i<480;i++){
			fprintf( fp, "\{ " );
			for(j=0;j<639;j++){
				fprintf( fp, "%d\,",tairu[j] );
			}
			fprintf( fp, "%d \}\n",tairu[j] );
		}
		fclose( fp );
	}

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 00:41
by 脱出の人
>一応こちらで試してみたソースです。
文字化けせずに出来たってことですよね?
なぜか出来ないです。
そのまんまコピーし貼り付けても出来ませんでした。

>char tairu[480][640];
の部分がintだったので変えてみたんですが駄目でした。

ちなみに
char a=0;
int a=0;
の0ってtxtに出力したときに同じ文字ですよね?
出力した文字をコピーしてc言語で使おうと思ってるんですが。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 00:45
by SCI
質問者さん
私の環境では、何の問題もなくファイルが作られました。
もちろん、スペースも入れていません。

文字化けは表示するアプリケーション側の問題ということも十分にありえるので、もう少し情報をいただけますか?
・何のソフトで、エンコードは何で表示したか
・変数は、ローカル変数か、グローバル変数か

ちなみに、私が試したソースは以下の通りです。
#include <stdio.h>

int tairu[480][640];

int main(void)
{
	FILE *fp;
	int i, j;
	
	for (i = 0; i < 480; i++)
	{
		for (j = 0; j < 640; j++)
		{
			tairu[j] = 0;
		}
	}
	
	fp = fopen("./MAP.txt", "w");
	
	for (i = 0; i < 480; i++)
	{
		fprintf(fp, "{ ");
		for (j = 0; j < 639; j++)
		{
			fprintf(fp, "%d,", tairu[j]);
		}
		fprintf(fp, "%d },\n", tairu[j]);
	}
	fclose(fp);
	getchar();
	return 0;
}

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 00:57
by 脱出の人
Windows
VC++ 2008EE
DXライブラリ
です。
エンコードが何なのか分からないです;;
軽くググったんですがよく分からず;;
変数もよく分からないんですが
キー入力で
GetHitMouseStateAll_2
を使っているのでグローバル変数だと思います。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:00
by SCI
出来上がったテキストをメモ帳で見てますか?

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:01
by 脱出の人
もしかして
#include <stdio.h>
  int tairu[480][640];//これがグローバル変数
int main(void)
{
  int i, j;//これがローカル変数
}
ですか?
だとしたらグローバル変数です。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:02
by 脱出の人
メモ帳で見てます。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:05
by SCI
メモ帳側がUnicodeとして認識しているので、文字化けします。
データ自体は問題ありません。

試しに、バイナリエディタ等でテキストファイルを見てください。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:05
by 脱出の人
MAP.txtを右クリックでワードパッド又はVC++で見たらちゃんと表示されてました!
メモ帳じゃ無理なんですかね?

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:08
by SCI
メモ帳は、サイズが大きいとUnicodeとして認識するみたいですね(詳しくは知りませんが)。
配列のサイズを小さくして、データを書き出し、メモ帳で開くとちゃんとANSIとして認識しました。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:09
by 脱出の人
SCIさんSooAさんありがとうございました。

Re:ファイルの出力で文字化けする

Posted: 2009年3月02日(月) 01:14
by SooA
犯人はメモ帳でしたか。

自分がさくらエディタを使ってるので
気がつきませんでした^^;

解決したようで何よりです。