ページ 1 / 1
ファイルの出力で文字化けする
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 脱出の人
やってみましたが文字化けしてしまいます。
ちなみに文字化けの内容ですが。
⁻ⰰⰰⰰ(同じ文字が大量に)ⰰⰰⰰ‰ⱽ਍
↑この文の繰り返しです。多分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
犯人はメモ帳でしたか。
自分がさくらエディタを使ってるので
気がつきませんでした^^;
解決したようで何よりです。