フランス語圏の人と日本人が、お互いの文化や語学について話し合うフォーラム形式の掲示板をPerlで制作したいのですが、フランス語には英語にないアクセント付のアルファベットがあり、一つのログファイルに二つの文字コードが混在すると一方が化けてしまいとても不便です。
Unicodeを使えば解決するのでしょうが、具体的にどうすれば良いのかわかりません。 jcode.plのように簡単に文字コードを変換してくれるモジュールでもあるのでしょうか。 それとも全く違う方法で解決できるのでしょうか。
初心者なので、なるべくわかりやすく説明していただければ幸いです。 よろしくお願いします。
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 の混合
と理解して試してみたのですが、両方とも文字化けしてしまいました。 ブラウザのエンコード設定を変えれば、どちらか片方は正常に見ることができます。 間違っているようでしたら、ご指摘していただけますか?
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 ”be”<動詞>と<助動詞>混同の誤り ― 形式主義文法論の混迷 12 2022/05/17 11:09
- 留学・ワーキングホリデー リスニング力、はつきますか?6カ月語学学校行き数年間お金を稼いでまた、6カ月間語学留学に行くのは? 1 2023/02/11 15:49
- 日本語 〈場所を示す「に」と「で」〉 という誤り 36 2022/11/12 15:04
- 英語 ソシュール言語観による品詞、単語、辞書理解の誤り 4 2022/11/24 12:27
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- 日本語 自立語/付属語という品詞区分の誤り 5 2022/09/05 00:20
- 日本語 <代名詞><指示詞>という誤り 4 2022/04/01 11:06
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- 留学・ワーキングホリデー 語学留学をして何ヶ月ほどしてリスニングが鍛えられますか? 1 2023/05/11 00:33
- その他(プログラミング・Web制作) ゲームを日本語化しようとすると文字化けしてしまいます。 2 2022/08/19 15:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cgiからsendmailを送信で文字化け
-
wordの数式について 定積分を書...
-
select値をhiddenのvalueに渡し...
-
フリーズする原因
-
ラジオボタンが両方とも選択で...
-
MSPゴシックで、一番幅を取る文字
-
CGI経由でのPDFファイルをダウ...
-
Yomi-Searchのカテゴリを縦並び...
-
さくらインターネットのCGI...
-
ラジオボタンを選択済みにする...
-
”送信ボタン” ”クリアボタン”...
-
アンケートフォームで前のペー...
-
ディレクトリのファイル数取得
-
WEBページを強制的に横画面で見...
-
チェックボックスで選択した内...
-
チェックボックスの返す値
-
<FORM TYPE="subumit">でデータ...
-
SELECTでgroup byした時の挙動
-
フォームメール確認用ページ
-
別formのhidden項目を自form値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ショッピングカートのクッキー...
-
cgiからsendmailを送信で文字化け
-
プログラミングについての質問...
-
perlを難読化、暗号化させたい
-
メール送信後のHTMLが文字化け...
-
content-dispositionによるファ...
-
.htaccessでサーバエラー
-
CGI実行できない。ソースが表示...
-
cgiで動画ファイルをアップロー...
-
CGIから移動したページでのリン...
-
MySQL+phpでHTML表示をhif...
-
UTF-8で文字化けしないようにす...
-
HPが文字化けしてしまいます
-
文字化けが出現
-
WEBアプリケーションからフォル...
-
CGIプログラムを使った申し込み...
-
SUN BBSの改造方法
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
WEBページを強制的に横画面で見...
おすすめ情報