• ベストアンサー

UTF-8でソースを書くとエラーになる

WinXPにApache2.0とperl5.8を入れて動作させているのですが、perlCGIをUTF-8で書くと500エラーになり表示することができません。 該当のソースは #!/usr/bin/perl package HTML; sub HEADER{ print "Content-type: text/html\n\n"; print << " -----END-----"; <!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <title>Test Program</title></head> <body>\n -----END----- } sub FOOTER{ print "</body></html>"; } &HTML::HEADER; print"テスト"; &HTML::FOOTER; 上と同じものをsjisで保存すると、こちらは正常に動作します。打って変わってこれをUTF-8で保存するとエラーが起こってしまいます。 error.logには C:/Apache2/htdocs/script/base.pl is not executable; ensure interpreted scripts have "#!" first line (9)Bad file descriptor: don't know how to spawn child process: C:/Apache2/htdocs/script/base.pl と記録されていて、これを頼りにググってみましたが有効そうな情報を見つけられませんでしたので、どうか原因と解決策を教えてください。

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

単に"テスト"と吐き出したいだけですから,use utf8 無しでいけると思います。 HTTPヘッダでのcharset指定と,IE対応のため utf8 ではなく utf-8 指定した,次のコードで試すとどうなりますか。 sub HEADER{ print "Content-type: text/html; charset=utf-8\n\n"; print << "-----END-----"; <!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <title>Test Program</title></head> <body>\n -----END----- } "テスト"を文字列として扱いたいのなら use utf8 することになります。関連した過去の私の回答はこちら。 http://okwave.jp/qa4081348.html http://okwave.jp/qa4177909.html http://okwave.jp/qa4042131.html http://okwave.jp/qa3745875.html

iata1989
質問者

お礼

文字コードの読み込みも正常に行われるようになりました。ありがとうございます。

その他の回答 (1)

  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.1

use utf8; を冒頭に書いて、 BOMなしで保存してみるとどうですか?

iata1989
質問者

補足

BOMの付かないUTF-8Nにしたところ、エラーの発生はなくなりましたが、今度は文字コードをブラウザがちゃんと認識できないのかsjisやISOで表示されるようになってしまいました。 一応エンコードをUTF-8に合わせると問題無く表示されますが…

関連するQ&A