• 締切済み

文字化け

CGIで旅の検索の画面を作っています。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> int main(void){ time_t timer; struct tm *t_st; FILE * fp fp=stdout; fprintf(fp,"\n"); time(&time); t_st=localtime(&timer); fprintf(fp,"<HTML>\n"); fprintf(fp,"<head>\n"); fprintf(fp,"<META HTTP-EQUIV="Content-Type"CONTENT="text/html; charset="EUC-JP,us-ascii">\n"); fprintf(fp,"<title>日付テスト</title>\n"); fprintf(fp,"</head>\n");      略 としているんですがソースを見ると <html> <head> <META HTTP-EQUIV="Content-Type"CONTENT="text/html; charset="EUC-JP,us-ascii"> <title> $BF|IU0.000000%H (B</title> </head> となっていて実際クライアント側でブラウザ(インターネットエックスプロ-ラ)でみると 『日付テスト』→『日付握旭旭旭ト』 と表示されます。 いろいろ試したところ全角カタカナの『テ』が『握旭旭旭』となり『ススス』とすると『スス』という感じでスがひとつ表示されなくなります。 この文字化けを直すことはできないでしょうか?? どんなことでも構いませんのでなにか情報をお持ちの方は返信お願いします。

みんなの回答

  • t140
  • ベストアンサー率39% (59/150)
回答No.4

fprintf関数に渡しているのはJISコードですね。 JISコードの『テスト』は、『%F%9%H』となります。 これはprintf関数系のフォーマット指定子ですよね?

回答No.3

コンパイル前のファイルの文字コードがShift_JISになってませんか?

saki05027
質問者

補足

ありがとうございます。 確認してみたました。ちゃんとEUCになっていたんですが・・・。 そこが原因ではないってだけでも前に進めた気がします。 ほかに思い当たる原因があればぜひ教えてください。

回答No.2

charset=の後のダブルクォーテーションは要らないのではないでしょうか。また、us-asciiも要らないのでは? fprintf(fp,"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=EUC-JP\">\n"); このようになると思います。 それからHTTPヘッダでContent-TypeをEUC-JPとして出力しているかどうかも確認したほうがよいかもしれません。

saki05027
質問者

補足

ありがとうございます。 さっそく試したところページ全体がコードで出力されてしまいます。 タイトル部分『日付テスト』は ←$BF|IU0.000000%...... という具合に変換されて出力されてきました。 HTTPヘッダも確認したのですがEUC-JPになっていました。 何かほかに気になることがあればぜひ教えてください。

  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.1

とりあえず、試しにエスケープしてみてはどうでしょうか? fprintf(fp,"<title>日付テスト</title>\n"); を以下のように。 fprintf(fp,"<title>\日\付\テ\ス\ト</title>\n");

saki05027
質問者

補足

ありがとうございます。早速下記のとおり試したのですが fprintf(fp,"<title>\日\付\テ\ス\ト</title>\n"); コンパイル時に『警告:unknown escape sequence: '/033'』 とでてコンパイルが通りません。 どうしたらいいでしょうか??