- ベストアンサー
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 と記録されていて、これを頼りにググってみましたが有効そうな情報を見つけられませんでしたので、どうか原因と解決策を教えてください。
- みんなの回答 (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
その他の回答 (1)
- atom_seed
- ベストアンサー率48% (25/52)
use utf8; を冒頭に書いて、 BOMなしで保存してみるとどうですか?
補足
BOMの付かないUTF-8Nにしたところ、エラーの発生はなくなりましたが、今度は文字コードをブラウザがちゃんと認識できないのかsjisやISOで表示されるようになってしまいました。 一応エンコードをUTF-8に合わせると問題無く表示されますが…
お礼
文字コードの読み込みも正常に行われるようになりました。ありがとうございます。