フランス語圏の人と日本人が、お互いの文化や語学について話し合うフォーラム形式の掲示板を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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlを難読化、暗号化させたい
-
プログラミングについての質問...
-
PHPの画像掲示板で一部の携帯電...
-
wordの数式について 定積分を書...
-
「value」に2つの値をセットす...
-
ラジオボタンが両方とも選択で...
-
VB.net データーグリッドビュー...
-
INPUT TYPE
-
チェックボックスでのor検索
-
リストボックス(multipleなsel...
-
CGIでチェックボックスを使...
-
ヨミサーチのデザイン変更について
-
サーバーのテキストファイルを...
-
CGI..pmを使っての画像のアップ...
-
[HTML]プルダウンメニューの横...
-
表の色を交互に変更
-
perlでHTMLソースを解析してfor...
-
perl cgi 文字コード変換について
-
Error: No Recipient というエ...
-
select値をhiddenのvalueに渡し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングについての質問...
-
CGI.pmのstart_htmlで思い通り...
-
ファイルダウンロードで、DBCS...
-
firefoxの文字化け(エンコーデ...
-
cgiからsendmailを送信で文字化け
-
WEBアプリケーションからフォル...
-
メール送信後のHTMLが文字化け...
-
Perl言語のオンライン文法チェ...
-
ループが可能なHTMLテンプレー...
-
PHPの画像掲示板で一部の携帯電...
-
CGI生成ページをNetscapeで表示...
-
perlを難読化、暗号化させたい
-
HPが文字化けしてしまいます
-
IE以外のブラウザでキャッシュ...
-
予約システムの文字化け
-
CGIから移動したページでのリン...
-
CGIからsystem("display test.p...
-
検索結果が文字化けします。
-
CGI実行できない。ソースが表示...
-
ラジオボタンが両方とも選択で...
おすすめ情報