• ベストアンサー

欧文 iso-8859-1 と 日本語 euc-jp の混在するウェブページ

 フランス語圏の人と日本人が、お互いの文化や語学について話し合うフォーラム形式の掲示板をPerlで制作したいのですが、フランス語には英語にないアクセント付のアルファベットがあり、一つのログファイルに二つの文字コードが混在すると一方が化けてしまいとても不便です。  Unicodeを使えば解決するのでしょうが、具体的にどうすれば良いのかわかりません。 jcode.plのように簡単に文字コードを変換してくれるモジュールでもあるのでしょうか。 それとも全く違う方法で解決できるのでしょうか。  初心者なので、なるべくわかりやすく説明していただければ幸いです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • proust
  • ベストアンサー率57% (62/108)
回答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/\&/\&amp;/g; $morceau =~ s/\</\&lt;/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&eacute;sitez pas de nous &eacute;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

その他の回答 (1)

  • proust
  • ベストアンサー率57% (62/108)
回答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
pouta
質問者

お礼

ご丁寧な回答ありがとうございます。 さて、私はこれを、 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