アプリ版:「スタンプのみでお礼する」機能のリリースについて

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 ();



対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

A 回答 (3件)

> 1についてなのですが、webサーバで解釈できる文字コードはどのようにして調べればいいでしょうか?


サーバーの文字コードはサーバーの管理者にご確認ください。
もし、Windowsでサーバーを実行しているようであれば、utf-8ではなく、ShiftJISである場合が多いです。

> また、文字コードを指定して書くというのは、プログラムを保存する際に文字コードを指定して保存すれば良いのでしょうか。
それでも良いですし、クライアントで記載する際はShiftJISなどのクライアントで認識できるコードで保存し、サーバーに転送の際に文字コード変換をかけるという方法もあります。
    • good
    • 0

原因は多数存在します。



(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より前に、日本語のコメントを入れることで、回避できることもあります。

この回答への補足

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


metaタグを入れてみたのですが、自分の環境ではそれを入れるとページが白紙になってしまうようです。

補足日時:2012/11/17 00:36
    • good
    • 0

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

この回答への補足

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

補足日時:2012/11/17 00:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!