第一段階クリア!

試行錯誤を繰り返し、サンプルのHTMLインタフェースを表示することができた。
エラーログから、スクリプトとiTunesが通信できていないことはすぐに判明した。しかし、MacやiTunesの内部に精通しているわけではないので原因はすぐにはわからない。Kung-Tunesでも同じ様なエラーを見ているから、スクリプトとiTunes8のバージョン不整合かとも思った。
しかし、原因は単純だった。Webサーバ(apache2)を動かしているユーザの問題だったのだ。デフォルトのまま動作していて、CGIは動いていたため油断していたのだが、apacheをiTunesを実行しているユーザで起動しなければ行けなかった。ドキュメントにあったのに。迂闊であった。もちろん、これを公開するとなればセキュリティ上問題になるかもしれない。しかし、iTunesへのインタフェースのWebサーバがiTunesと同じマシンで動作していて、そのポートは外部にさらされておらず、穴を開ける予定もなければ問題はないだろう。
次の問題は、文字化け。サンプルのHTMLテンプレートでの表示は問題なくできたのだが、日本語はすべて文字化けする。ブラウザのエンコードを見るとISO-8859-1になっている。これをUTF-8に変更すれば正しく見れるのだが、いちいちブラウザを操作するのは美しくない。
キーワードを変えて何度も何度もグーグル先生に質問した。しかし、どれも、httpd.confのAddDefaultCharsetをコメントアウトするというものばかり。しかし、その行はMacのhttpd.confには存在しない。
調べると、最近のApacheではその行がデフォルトではなくなったとの記述があった。したがって、HTMLファイルないしは、CGIが出力するヘッダで文字コードを指定しなければならない、ということだった。CGIはまともに書いたことがない。PHPはCGIで使っていないため、そんな部分は想定外だった。そこで、次のページを見つけた。
Perlメモ/CGIモジュール – Walrus, Digit.
http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2fCGI%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB#pheader_charset
ここに、文字コードを指定して出力する方法があった。そこでソースを、次のように修正した。
・修正前
my $html = Text::Template::fill_in_file($Template, HASH => %var);
print header(), $html, “n”;
・修正後
my $html = Text::Template::fill_in_file($Template, HASH => %var);
use CGI;
my $query = CGI->new;
print $query->header(-charset => ‘UTF-8’); # キャラクタ・セットを指定
print $query->start_html(
-charset => ‘UTF-8’, # キャラクタ・セットを指定
-encoding => ‘UTF-8’, # キャラクタ・セットを指定
-lang => ‘ja-JP’ # 言語を指定
);
print $html, “n”;
サンプルでは、キャラクタセットの前にタイトルの指定があったのだが、そこは省略してみた。動作したからよしとする。
また、最初の動作確認では、オリジナルソースの、header()という部分を削除しなかったのだが、すると、ブラウザの一番上に、「ISO-8859-1」といくつかの文字が表示された。ようするに、この何もない()の中にはそのような意味が含まれるようなのだ。Perl素人なので理解するのは今後になるだろうが、なんとか最初の問題を解決できたので次の作業に進もうかと思う。

コメント