フランス語圏の人と日本人が、お互いの文化や語学について話し合うフォーラム形式の掲示板をPerlで制作したいのですが、フランス語には英語にないアクセント付のアルファベットがあり、一つのログファイルに二つの文字コードが混在すると一方が化けてしまいとても不便です。
Unicodeを使えば解決するのでしょうが、具体的にどうすれば良いのかわかりません。 jcode.plのように簡単に文字コードを変換してくれるモジュールでもあるのでしょうか。 それとも全く違う方法で解決できるのでしょうか。
初心者なので、なるべくわかりやすく説明していただければ幸いです。 よろしくお願いします。
No.2ベストアンサー
- 回答日時:
惜しいのですがログファイルの保存形式が違います。
ログファイルもスクリプトなどと形式をあわせる、
つまりutf-8にする必要があります。
いい加減なスクリプトを書いて試したところ、
WindowsXP + IE6/Opera7の環境では、正しく入力・表示できています。
以下に載せます。
#!/usr/bin/perl
#テスト用に作成したもので、セキュリティ対策や
#ロックなどの通常欠くべからざる処理をはしょって
#います。このまま使用しないでください
sub mourir {
my ($erreur) = @_;
print "Content-type: text/plain\r\n\r\n";
print "error $erreur";
exit 0;
}
sub decoder {
my ($enigme) = @_;
$enigme =~ s/%([0-9a-fA-F].)/{chr(hex('0x'.$1))}/ge;
return $enigme;
}
sub laver {
my ($morceau) = @_;
$morceau =~ s/\&/\&/g; $morceau =~ s/\</\</g;
return $morceau;
}
$fichier = "/tmp/logfile.txt";
print <<FDP;
Content-type: text/html;charset=utf-8\r
\r
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<form action="/cgi-bin/a.cgi" method="POST">
N'hésitez pas de nous écrire par ici: <BR>
<textarea name="texte"></textarea>
<input type="submit" name="bouton" value="cliquer">
</form>
FDP
unless (defined($ENV{'CONTENT_LENGTH'})) {
print "</body></html>";
exit 0;
}
$longueur = $ENV{'CONTENT_LENGTH'};
open dfo, ">>$fichier" || mourir $!.':1:'.__LINE__;
print dfo "<hr><pre>\n";
while ( 0 < ($resultat = read(STDIN, $morceau, $longueur))) {
print dfo $morceau;
$longueur -= $resultat;
last unless $longueur;
}
print dfo "\n</pre>\n";
close dfo || mourir $!.':3:';
print "Et voici...";
open dfi, $fichier || mourir $!.':4:';
while( <dfi>) {
print decoder($_);
}
close dfi || mourir $!.':5:';
print <<FDC;
</body>
</html>
FDC
No.1
- 回答日時:
ログの表示等で1画面に日仏両言語を混在させるなら、
たぶん「UTF-8」を使用するのがいいかなと思います。
今手元に環境がないので試していませんが、
表示するページの「レスポンスヘッダ」に
Content-type: text/html; charset=utf-8
をつけ、なおかつHEADエレメント内に
<meta http-equiv="content-type" content="text/html; charset=utf-8">
を書けば、utf-8の内容でform入出力できそうです。
ログファイルには、formから入力されたままの
形式で保存しておけばよいと思います。
ただし、cgi/htmlの漢字はutf-8対応のエディタで
書いておく必要があります。
参考URL:http://euc.jp/i18n/charcode.ja.html
ご丁寧な回答ありがとうございます。
さて、私はこれを、
cgiのヘッダー → Content-type: text/html; charset=utf-8
出力されるHTMLのHEADエレメント内 → <meta http-equiv="content-type" content="text/html; charset=utf-8">
スクリプトの記述・保存フォーマット → UTF-8 (私の使用しているエディターでは、Unicode(UTF-8)と表示されます。)
ログファイル → iso-8859-1 と euc-jp の混合
と理解して試してみたのですが、両方とも文字化けしてしまいました。 ブラウザのエンコード設定を変えれば、どちらか片方は正常に見ることができます。 間違っているようでしたら、ご指摘していただけますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルダウンロードで、DBCS...
-
プログラミングについての質問...
-
WEBアプリケーションからフォル...
-
perlを難読化、暗号化させたい
-
CGIからsystem("display test.p...
-
CGIから移動したページでのリン...
-
ラジオボタンが両方とも選択で...
-
wordの数式について 定積分を書...
-
チェックボックスの返す値
-
FORMのselectの選択肢を最初か...
-
チェックボックスとセレクトボ...
-
Error: No Recipient というエ...
-
WEBページを強制的に横画面で見...
-
CGIでチェックボックスを使...
-
ローカルテストサーバーと本番...
-
Excelのセルに HTML を貼りつけ...
-
ログファイルの編集についてお...
-
CGIプログラムに詳しい方よろし...
-
「value」に2つの値をセットす...
-
cgiで表示したフレームに結果を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgiからsendmailを送信で文字化け
-
プログラミングについての質問...
-
perlを難読化、暗号化させたい
-
PHPのlocationについて
-
content-dispositionによるファ...
-
CGI実行できない。ソースが表示...
-
検索結果が文字化けします。
-
ウェブサイトが文字化けします
-
SSI対応じゃないCGIをSSI対応に…
-
IE以外のブラウザでキャッシュ...
-
CGIから移動したページでのリン...
-
画面の改行ピッチを変えたいの...
-
firefoxの文字化け(エンコーデ...
-
Locationの文字化け
-
Perl言語のオンライン文法チェ...
-
CGI.pmのstart_htmlで思い通り...
-
予約システムの文字化け
-
ショッピングカートのクッキー...
-
こんにちは。
-
ファイルダウンロードで、DBCS...
おすすめ情報