PerlでCGIモジュールを利用する時、Content-Typeヘッダにcharsetパラメータを加えるには、header
メソッドで-charset => 'UTF-8'
などと指定するわけですが、どうもtext/*なもの以外では無視され、Content-Typeヘッダにcharsetパラメータを加えてくれないみたいです。
要は、
print header(
-type => 'application/xml',
-charset => 'UTF-8',
);
だと、
Content-Type: application/xml
としか出力されないってことです。
blosxomに$blog_charset
という文字コードを指定する設定を追加しようとして、ゴニョゴニョやっていた時に気づきました。CGIモジュールのソースでcharsetパラメータを付け加えるコードが、
$type .= "; charset=$charset" if $type ne '' and $type =~ m!^text/! and $type !~ /\bcharset\b/ and $charset ne '';
となってたので、text/*以外では無視というのはどうやら当たっていたみたいです。なので、
print header(
-type => 'application/xml; charset=UTF-8',
);
こうやってやらないとダメぽ。またひとつ賢くなりました。
バッド・ノウハウ!