最近とにかくムカつくもの。Flash のバナー広告で音が鳴るやつ。 アメリカンホームダイレクトの「ちゃんちゃららー」とか「セザール」(連呼)とか。ウザスギんぞこら。
freeamp で mp3 を聴きながら作業してると、音を出す Flash をロードした時点で mozilla が固まる。 mp3 の演奏を止めてやると復活するので、あ、と思ったら演奏を止めねばならん。止めた途端に「セザールセザールセザール」って、うるせーよ!! 一時停止じゃだめで、完全に演奏を止めないといけない点も、非常にウザい。
CGI.pm 覚え書き。同僚に「謎の文字化けがー」と泣きつかれたので調査。 社内 LAN 内のテスト(共用)サーバでは化けないのに、本番サーバだと化けるそうな。
HTTP を生で喋ってヘッダを見てみる。
社内サーバ。 HTTP/1.1 200 OK Date: Mon, 05 Mar 2001 08:49:32 GMT Server: Apache/1.3.14 (Unix) (Kondara MNU/Linux) mod_perl/1.21 PHP/3.0.18-i18n-ja-2 Content-Type: text/html 以下略 本番サーバ。 HTTP/1.1 200 OK Date: Mon, 05 Mar 2001 09:00:06 GMT Server: Apache/1.3.14 (Unix) PHP/4.0.3pl1 Content-Type: text/html; charset=ISO-8859-1 以下略
全然環境が違うじゃねーか、てのは置いておいて(^^; 本番環境だと Content-Type ヘッダに charset が指定されていて、 このせいで EUC-JP の本文が化けるわけですね。
同僚はスクリプト中では明示的に指定していないそうなので、CGI.pm の挙動の違いか。 CGI.pm のバージョンを調べてみると、社内サーバのは 2.46、本番サーバのは 2.74。
perldoc で見てみると、2.74 では「特に指定されていなければデフォルトは ISO-8859-1」だそうな。 解決法は、
$query->charset('EUC-JP');
または
$query->header(-type=>'text/html', -charset=>'EUC-JP' );
として、必ず明示的に charset を指定する。ついでにこの際だから社内サーバの方も CGI.pm を 2.74 に上げておこう。