文字化け問題とは?

このQ&Aのポイント
  • 文字化け問題とは、テキストデータが正常に表示されないことを指します。
  • 文字化けは、文字コードの設定ミスやデータの変換エラーなどが原因となります。
  • 文字化けが発生した場合、正しい文字コードを設定するか、データの変換を行う必要があります。
回答を見る
  • ベストアンサー

文字化け

以下のように作成して、実際に表示すると文字化けします。 CGIは素人です・・。宜しくお願いします。 # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> <HEAD> <TITLE>DOUBLE STEAL DESIGN MARKET</TITLE> </HEAD> <BODY background="bg2.gif"> <CENTER> <B><FONT size="4"> <FONT color="red"> <BR> ありがとうございました。 <P> 至急お送りいたします。</FONT> <P> <FONT color="blue">☆</FONT> </B> </CENTER> </BODY> </HTML> END_OF_HTML 実際に表示される文字は・・・  ^0!#(B ;j5^Aw?STDOUT_TOP!#(B !y(B です。お願いします・・・。

  • CGI
  • 回答数6
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.6

>スクリプトのコード体系とcharsetの指定がずれていませんか? > >上記の意味がわからなくて・・・。どうしたら良いのですか?? この件ですが、angelyがおつくりになったPerlスクリプトの >ありがとうございました。 >至急お送りいたします。 の文字は、EUC,シフトJIS,JIS漢字のいずれで作成されてますか?この文字のコードとcharsetで指定したコードの種類が違えば、化けますよ。 FTPでファイル転送しているのであれば、FTPで漢字コード変換をかけていることもありますので、確認してみてください。

angely
質問者

お礼

arataさん、素敵です。まさに、『FTPでファイル転送しているのであれば、FTPで漢字コード変換をかけていることもありますので、確認してみてください。』でした。感動です。何度も答えてくれてありがとうございます。以前質問出したときは、見捨てられたので、今回もいつ見捨てられるんじゃないかと心配でした。 インターネットって簡単に手を引こうと思えば引けるのに・・・。今度は上記のものを自分用のスクリプトに書き換える作業です。また何かあったら質問にのせるので、お願いしますね。 ではでは、本当にありがとうございました。

その他の回答 (5)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.5

> &jcode'convert(*form,'sjis'); の記述が、気になりますね。  formって変数は、多分クエリーを分解して「$FORM{KEY}=VALUE」となるようにセットしたハッシュだと思うんですが、どうでしょうか?  もしそうなら、こんな風に書き換えてみて下さい。   if ($ENV{'REQUEST_METHOD'} =~ /POST/i) {     read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});   } else {     $buffer = $ENV{'QUERY_STRING'};   }   @pairs = split(/&/,$buffer);   foreach (@pairs) {     my ($key,$val) = split(/=/,$_);     $val =~ tr/+/ /;     $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;     &jcode::convert(\$val, 'sjis');     $FORM{$key} = $val;   } # 「Perl 5」を想定しています。

angely
質問者

補足

お返事ありがとうございます。 教えていただいた通り、スクリプトを変更したんですが こんどは表示ができなくなってしましました。 formって変数は、多分クエリーを分解して「$FORM{KEY}=VALUE」となるようにセットしたハッシュだと思うんですが、どうでしょうか? 上記の内容の意味がわからなくて・・・。 マニュアル本についてきたCD-ROMをコピーして使っているので 自分ではとくに何もしていないんです・・・。

  • arata
  • ベストアンサー率49% (139/279)
回答No.4

もしかして、間違っていたら「ごめんなさい」なので すが、 &jcode'convert(*form,'sjis'); って、入力側(ウェブブラウザ→サーバー)のコード をシフトJISに変換している部分ですよね? これは、出力(サーバー→ウェブブラウザ)するデータ の文字コードとは関係ないと思うのですが、スクリプト のコード体系とcharsetの指定がずれていませんか?

angely
質問者

補足

見捨てないでくれてありがとうです。 マニュアル本を読んだら、&jcode'convert(*form,'sjis'); は入力側の文字変換のことだと書いてありました。 じゃあ、文字化けには関係ないですよね? スクリプトのコード体系とcharsetの指定がずれていませんか? 上記の意味がわからなくて・・・。どうしたら良いのですか??

  • arata
  • ベストアンサー率49% (139/279)
回答No.3

print "Content-Type: text/html;charset=Shift_JIS\n\n"; 上記以外に、メタタグをつけると直るかもしれません。 print << "END_OF_HTML"; <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS"> <HTML>

angely
質問者

補足

何度もありがとうございます。 メタタグをつけてみたのですが、状況は変わらすです・・・。 送信ボタンを押してからの画面が文字化けするんですけど、 その前の画面のオーダーフォームは文字化けしないんですよぉ。 これはなぜなんでしょう? # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); というスクリプトに関係あるのでしょうか??

  • arata
  • ベストアンサー率49% (139/279)
回答No.2

まず、charsetのところですが、-ではなくて、 charset=だったと思うのですが。 それから、Perlかシェルのスクリプトだと思います が、スクリプトの文字コードとContent=で指定する 文字コードは一致させてください。 スクリプトがシフトJISならShift_JISですし、EUC ならeuc-jpとしてください。 では

angely
質問者

補足

ありがとうございます。 スクリプトの文字コードは # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); です。なので、Content・・・では Shift_JIS にしました。 それでも文字化けが生じます。 なぜでしょう?? おわかりになりましたら、教えてください。

  • ryouki
  • ベストアンサー率50% (11/22)
回答No.1

文字コードは何をお使いでしょう?わかんない?(^^; わかんないなら、その化けた CGI を表示させた状態で、エンコードを変えてみましょう。 InternetExplorer なら、上メニューの[表示]-[エンコード]。 ShiftJIS/EUC/JIS が、日本語のコードです。どれに当てはまるか試してみる。 まぁ、普通の Win9x とか Mac とかなら Shift-JIS 使ってる気がするので、 print "Content-type:text/html\n\n"; の行を print "Content-type:text/html;charset-Shift_JIS\n\n"; ってしてあげると幸せかも知れません。

angely
質問者

補足

早速ありがとうございます。 エンコード調べてみました。 シフト JIS というものになっていたので、 スクリプトを教えていただいたように(print "Content-type:text/html;charset-Shift_JIS\n\n"; ) 直してみたのですが、結果は同じでした。 どうしたらよいのでしょうか??

関連するQ&A

  • CGIが文字化けしてしまう。(Perl)

    環境 WinXP    Apache ActivePerl 開くソフトは「Tera pad」      でやっています。ソースは #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ああああ。</BODY>\n"; print "</HTML>\n"; __END__ です。「ああああ」部分が「‚ ‚ ‚ ‚ B」 と表示されます。 どなたか解決方法ご存知の方いらっしゃいましたら ご回答お願いします。

    • ベストアンサー
    • CGI
  • if構文を追加するとうまくうまく動きません。。。

    すみません、CGIの初心者なのですが、下記のプログラムをしたところうまく起動せず困っております。ifの構文を抜いた場合はうまく動くのですが、名前欄等を入力されなかった場合、エラー表示を出したく、if文を追加したのですが、うまく動きません。どなたか原因おわかりになりますでしょうか? #!C:\Perl\bin\perl # ライブラリ require 'cgi-lib.pl'; # デコードサブルーチン &ReadParse(*form); # ライブラリ require 'kaiin_sub.pl'; #名前欄、メールアドレス欄、住所欄、郵便番号欄がのチェック if($form{'name'} eq""||$form{'mail'} eq""||$form{'post'} eq""||$form{'jyusyo'} eq""){ #必要事項が空白のとき #エラーコードを表示するサブルーチン &input_error; #cgiプログラムの終了 exit; }else{ # ライブラリ require 'jcode.pl'; # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); # 連想配列から値だけを取り出し、区切りのハイフンを追加 $data = "$form{'name'}\n$form{'furigana'}\n$form{'mail'}\n$form{'post'}\n$form{'jyusyo'}\n$form{'jyusyo1'} \n$form{'kansou'}\n\n----------\n\n"; # 追加書き込みモード open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error."; flock(ENQ, 2); print ENQ $data; flock(ENQ, 8); close(ENQ); # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> <HEAD> <TITLE>(^_^)</TITLE> </HEAD> <BODY bgcolor="cornflowerblue"> <CENTER> <B><FONT size="6"> <FONT color="white"> <BR> 会員登録は完了致しました。 <P> ご協力ありがとうございました。</FONT> <P> <FONT color="white">(^O^)/~</FONT> </B> </CENTER> </BODY> </HTML> END_OF_HTML } またkaiin_sub.pは以下となります。 # -- 入力不足エラーを表示するサブルーチン -- sub input_error { print "Content-type:text/html\n\n"; print << "END_OF_ERROR"; <HTML> <HEAD> <TITLE>エラー</TITLE> </HEAD> <BODY> <CENTER> <FONT size="6" color="red"><B> <BR> お名前欄、メールアドレス、郵便番号、住所のいずれかが空白です <P> もう一度入力して下さい。 </B></FONT> </CENTER> </BODY> </HTML> END_OF_ERROR } 宜しくお願い致します。

    • 締切済み
    • CGI
  • ヒアドキュメントで表示した、ある特定の全角文字が文字化けする(直接printだとOK)

    Redhat7.3 perl5.6 タイトルの通りなのですが、 ヒアドキュメント中にある特定の文字列(確認できたのは、「表」「申」) をHTML表示すると、文字化けしてしまいます。 print "Content-type: text/html\n\n"; print '<html><head><title>test</title></head><body>'; print << "HTML"; 1:表 HTML print '2:表'; print '</body></html>'; という記述方法ですが、 2の方は正しく表示されるのですが、 1:の方が文字化けして表示されてしまいます。 他の全角文字は問題なく表示されています。 どなたか原因をご存知の方、ぜひともご教授ください。

    • ベストアンサー
    • Perl
  • なぜ文字がでかくなってしまうのでしょうか?

    http://masaboo.cside.com/new_css1/cs_11.htmを見てるのですが ************************************** <HTML> <HEAD> <TITLE>サンプル</TITLE> <STYLE type="text/css"> <!-- H1 { color:red; } P { color:green; } --> </STYLE> </HEAD> <BODY> <H1>レベル1の見出しは赤色です。</H1> <P>段落は、緑色です。</P> </BODY> </HTML> ************************************** のサンプルの意味がよくわからないのですが、 なぜ、 H1 { color:red; } を宣言するだけで、文字がでかくなってしまうのでしょうか? フォントサイズに関する記述がないのに、 赤文字が大きくなる理由を教えてください。

    • ベストアンサー
    • HTML
  • CGI勉強中(初心者です)

    #!/usr/bin/perl print "content-type:text/html\n\n"; print "<HTML>\n"; print "<head><title>CGI</title></head>\n"; print "<BODY>\n"; print "<H1><FONT COLOR=\"#FF0000\">こんにちは</FONT></H1>\n"; print "</BODY>\n"; print "</HTML>\n"; というCGIつくりました。 プロバイダの説明には Perlの場所 /usr/bin/perl または /usr/local/bin/perl となっていますが、 どこにどう置いて(ホームディレクトリでしょうか?)、どうやって起動させてよいのかさっぱりわかりません。 ご教授ください。

    • ベストアンサー
    • CGI
  • 文字化けすると言われましたが

    自宅PC(XP)、会社PC(98)では 問題なかったのですが、XPでIE6を使用の方に 文字化けすると言われました 以下ソースです 「恋をして…」が文字化けし エンコードすれば読めるらしいのですが…。 ひょっとして、末にある <BASEFONT SIZE="2"Font Color="black"> が問題なのでしょうか? <HTML> <HEAD> <TITLE>玄関</TITLE> <meta http-equiv="refresh" content="8; url=top.html"> </HEAD> <STYLE> BODY{ scrollbar-3dlight-color:#ffffff; scrollbar-arrow-color:#ffffff; scrollbar-darkshadow-color:#ffffff; scrollbar-face-color:#ffffff; scrollbar-highlight-color:#ffffff; scrollbar-shadow-color:#ffffff; scrollbar-track-color:#ffffff;} </STYLE> <BODY bgcolor="white" text="#000000" link="#000000" vlink="#000000" alink="#000000" style="background-repeat : no-repeat;background-attachment : fixed;background-image : url;; background-position : right bottom;"> <DIV ALIGN="center"><TABLE border="0"> <BR><BR><BR><BR><BR><BR><BR><TR> <TD><BR><BR><BR>恋をして私は</TD> </TR> <TR> <TD><DIV ALIGN="rignt"><Img Src="image/back/031231.bmp" Alt="" border="0"></DIV></TD> </TR> <TR> <TD><DIV ALIGN="left"><B></B><BR><BR>                         馬鹿になった。</DIV></TD> </TR> </TABLE></DIV> <BASEFONT SIZE="2"Font Color="black"><p align="left"> <BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>       <BR></Font> </P> </BODY> </HTML>

    • ベストアンサー
    • HTML
  • CGIで~秒後にジャンプします。を入れたいのですが・・・・

    CGIで~秒後にジャンプします。を入れたいのですが・・・・ print部分が↓の部分に~秒後に指定のURLにジャンプする部分を入れたいのですが print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>Thank you!</TITLE></HEAD>\n"; print "<BODY bgcolor=\"#9dffff\">\n"; print "<H2 align=\"center\">アンケートにご協力誠にありがとうございました!</H2>\n"; print "<HR>\n"; print "<P>\n"; print " あなたの貴重な意見を今後のお店作りに役立てたいと考えています。\n"; print "</BODY></HTML>\n"; わかる方いましたらお願いします。

    • ベストアンサー
    • CGI
  • CSSで文字間隔を指定すると<br>が反映されなくなる

    <HTML> <HEAD> <TITLE>TAG index Webサイト</TITLE> </HEAD> <BODY> p{ letter-spacing: 2px; font-size:20px; font-family:'MS Pゴシック'; line-height:130%; } </BODY> </HTML> このようにすると、 <p><b>文章1。 <br><br> 文章2。 </b></p> の<br>が反映されなくなります。<br>を余分に入れると1行あきます。 <br>を余分に入れずにあけることはできるのでしょうか?

  • メールフォーム

    print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>Thank you!</TITLE></HEAD>\n"; print "<BODY bgcolor=\"#DEB887\">\n"; print "<H2 align=\"center\">メール送信完了!</H2>\n"; print "<HR>\n"; print "<P>\n"; print " しばらくお待ちください。\n"; print "</BODY></HTML>\n"; CGIでメールフォームを作成してて、送信後の画面はこんな感じにしてるのですが、 meta http-equiv="refresh" content="5;url=sample.html 5秒後に自動でTOPページへ持っていくようにしたいのですが、これはどこに入れたらいいんでしょうか?

    • ベストアンサー
    • CGI
  • テキストカウンターができない詳しい人教えて!

    #!/usr/bin/perl # 読み書きモードでファイルオープン # オープンできないときは強制終了 open(COUNT, "+<countdata") || die "File 'countdata' Open Error."; # ファイルをロックする #flock(COUNT,2); # ファイルから一行読みこむ $counter = <COUNT>; # カウントアップ $counter_new = $counter + 1; # ファイルポインタを先頭に戻す seek(COUNT, 0, 0); # ファイルに出力=書き込み print COUNT "$counter_new?n"; # ファイルクローズ close(COUNT); # ファイルロックを解除する #flock(COUNT,8); # ------- 出力はここから ------- # print "Content-type: text/html?n?n"; print << "END_OF_HTML"; <HTML> <BODY> <CENTER> <FONT size="6"><B> ようこそ<BR> あなたは<FONT color="red"> $counter_new </FONT>人目のお客様です </B></FONT> </CENTER> </BODY> </HTML> END_OF_HTML をcounter.cgiに保存してcountdataに0と打ち込んでwebサーバーにアップしましたが500エラーで見れません CGIの本通りに行いましたができませんサポートページもなく困っています ソースミスなどここが違うなどあったら教えて下さい あとパーミッションなども御願いします

    • ベストアンサー
    • CGI