CGIスクリプトから出力したHTMLの日本語部分のみが文字化けします。CGIの文字コードはEUCで、HTMLヘッダでは<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-JP”>と明示しているにも関わらず、文字化けします(文字コードをEUCに手動変更すると改善される)。手動変更せずに文字化けしないようにしたいのですが、何が原因でどう対応すれば良いでしょうか?ちなみにPerl5.8.4、Apache/1.3.33 (Unix)を使用しています。文字化けの症状としては、例えば「初級 / 中級」が「&frac12;&eacute;&micro;&eacute;&iexcl;&iexcl;/&iexcl;&iexcl;&Atilde;&aelig;&micro;&eacute;」のように表示されます。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答10件)

id:nishiyu No.1

回答回数1568ベストアンサー獲得回数2

ポイント13pt

http://www.kent-web.com/pubc/jcode/

文字化けについて

こちらを参考に

Shift-JISとかで試してみましたか?

id:dak

一応としても文字化けするようです。

2004/12/18 09:31:17
id:americanboss No.2

回答回数52ベストアンサー獲得回数0

ポイント18pt

http://hp.vector.co.jp/authors/VA014833/CGI/header.html

CGI $B%W%m%0%i%`$N2~NI0F(J/$B%X%C%@$N=q$-J}(J

HTMLのヘッダではなく、HTTPのヘッダで文字コードを指定していないからだと思われます。

id:dak

実はたった今自力で問題が解決しました(CGI.pmからprint $q->header;としてヘッダを出力していたのを、普通にprint ”Content-type: text/html¥n¥n”;としたら解決)。これは何故でしょうかね。HTTPヘッダでの文字コード指定も勉強になりましたので、ポイント付けたいと思います。以後、解決済みのためポイントは低くなりますが、参考のため参照させて頂きます。ご了承下さい。

2004/12/19 09:25:00
id:TomCat No.3

回答回数5402ベストアンサー獲得回数215

ポイント18pt

http://www.hatena.ne.jp/1

人力検索はてな

URLはダミーで失礼します。

もしかすると、CGIのソースコードが

EUCで保存されていないのかもしれません。

ローカルではEUCでも、サーバに転送される時に

他の文字コードになってしまう場合もあります。

お使いのFTPクライアントの転送設定なども確認してみてください。

また、サーバによっては、出力させるに当たって特に

print ”Content-type: text/html; charset=EUC-JP¥n¥n”;

などとcharsetまで含めて指定しておかないと、

意図した日本語文字コードに対応してくれない場合があります。

とりあえず、CGIが出力したページのソースを取って、

どこに問題点があるかを検討してみてください。

それが一番の早道です。

id:dak

ありがとうございます。

2004/12/19 09:25:21
id:GEN111 No.4

回答回数472ベストアンサー獲得回数58

ポイント13pt

http://www.apache.jp/

JAPAN APACHE USERS GROUP

apache の httpd.conf の

AddDefaultCharset ISO-8859-1

を↓にするとか

AddDefaultCharset Off

あと CGI からキャラクタセットを指定するなら HTML ではなく

content-type: text/html; charset=EUC-JP

のようにするのが本筋ではないでしょうか。

id:dak

ありがとうございます。

2004/12/19 09:25:49
id:ke_ishi No.5

回答回数269ベストアンサー獲得回数0

ポイント13pt

print ”Content-type: text/html;charset=Shift_JIS¥n¥n”;

は出してますでしょうか。

id:dak

ありがとうございます。

2004/12/19 09:26:03
id:stakaha No.6

回答回数20ベストアンサー獲得回数0

ポイント13pt

Apacheの設定でAddDefaultCharsetにUTF-8を指定していませんか?

URLを参考にしてみてください。

id:dak

ありがとうございます。

2004/12/19 09:26:14
id:Akkiesoft No.7

回答回数90ベストアンサー獲得回数5

ポイント13pt

アップロードでEUCモードにしてアップロードしていますか?

質問文のタグがコピー&ペーストだとすると、「”」の文字が全角になっているのが気になります(はてなが変換しているのかな?)。

id:dak

ありがとうございます。これははてなが変換しているようです。

2004/12/19 09:26:36
id:ymlab No.8

回答回数508ベストアンサー獲得回数34

ポイント18pt

meta 以外に、

httpヘッダに埋め込みましたか?

私のcgiで恐縮ですが、これの3行目のようなことをして埋め込みます。

#!/usr/local/bin/perl

use strict;

print ”Content-type: text/html; charset=euc-jp¥n¥n”;

require ”header.pl”;

&htmlstart();

&header(”title”,

”./style.css”,

”./CommonJavascript.js”,

”no-cache”

);

&contentsstart();

もしくは、サーバがわで設定すればどうでしょう。

もしもサーバにApacheを使っていおらっしゃるならば、Apacheの httpd.confファイルの中に、次の一行を付け加えましょう。

AddType ”text/html; charset=EUC-JP” .html

id:dak

ソースを見るとよく分かりますね。ありがとうございました。

2004/12/19 09:29:10
id:shiru No.9

回答回数6ベストアンサー獲得回数0

ポイント13pt

 HTTPヘッダで、EUCを使うことを明言してみるといいかもしれません。ブラウザによってはmetaタグの情報を認識しないようです。

Content-Type: text/html; charset=euc-jp

id:dak

ありがとうございます。

2004/12/19 09:29:18
id:quintia No.10

回答回数562ベストアンサー獲得回数71

ポイント13pt

質問ではサーバ環境が判りませんが、Apacheであれば、.htaccessファイルを置いて、AddCharset ディレクティブで明に指定するといいかと思います。

id:dak

ありがとうございました。こういった場合、文字コードをWWWサーバの設定ファイルで明示する方法と、HTTPヘッダで明示する方法があるようですね。それと、今後この質問を参照した人のために「CGI.pm」からのヘッダ出力かもよ。と書いて質問を終了したいと思います。回答ありがとうございました。

2004/12/19 09:33:05
  • id:GEN111
    CGI.pm

    単に
    print $q->header ;
    とすると、
    Content-Type: text/html; charset=ISO-8859-1
    が出力されます。

    print $q->header(-charset => ’EUC-JP’) ;
    とするなどしてキャラクタセットを指定しなければなりません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません