• 締切済み

perlのcgiが文字化けします。

perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

みんなの回答

noname#189141
noname#189141
回答No.3

> 1についてなのですが、webサーバで解釈できる文字コードはどのようにして調べればいいでしょうか? サーバーの文字コードはサーバーの管理者にご確認ください。 もし、Windowsでサーバーを実行しているようであれば、utf-8ではなく、ShiftJISである場合が多いです。 > また、文字コードを指定して書くというのは、プログラムを保存する際に文字コードを指定して保存すれば良いのでしょうか。 それでも良いですし、クライアントで記載する際はShiftJISなどのクライアントで認識できるコードで保存し、サーバーに転送の際に文字コード変換をかけるという方法もあります。

noname#189141
noname#189141
回答No.2

原因は多数存在します。 (1) Webサーバーで解釈できる文字コードはutf-8で間違いないですか?  charset=utf-8 の指定がありますが、utf-8で動くWeb環境でしょうか? (2) ファイル転送時の文字コード  (1) が問題ないとして、Windows環境から転送する際に、正しく文字コード変換ができていますか?  ShiftJISで書いていたら、もちろん文字化けします。 (3) Webブラウザの文字コード認識に問題ないですか?  「自動認識」の場合、ブラウザによってはうまく認識されないことがあります。  別のブラウザで試すか、「自動認識」では無く明示的に指定してみてください。 (4) meta tagを入れてみる。(ブラウザに正しく文字コード認識をさせる)  対処療法かもしれませんが、meta tagで文字コードを指定すると解決することもあります。  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> (5) 同様にtitle tagより前に、日本語のコメントを入れることで、回避できることもあります。

izha
質問者

補足

回答ありがとうございます。とりあえず、今調べられる3番、4番、5番について確かめてみました。 1についてなのですが、webサーバで解釈できる文字コードはどのようにして調べればいいでしょうか? また、文字コードを指定して書くというのは、プログラムを保存する際に文字コードを指定して保存すれば良いのでしょうか。 metaタグを入れてみたのですが、自分の環境ではそれを入れるとページが白紙になってしまうようです。

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.1

単純に、「jcode.pl」がインクリュードしてないだけとか?

izha
質問者

補足

jcode.plはどのように使えば良いのでしょう。 色々見てみたのですが、どれも違う使い方をしているように見えて、どうすればいいのか解らなくなってしまいました。