#!/usr/bin/perl -w use strict; use XML::RSS; use encoding 'utf8'; use Jcode; my $rss = new XML::RSS (version => '1.0', encode_output => 0); $rss->channel( title => "example.com", link => 'http://example.com', language => 'ja', description => "description", ); open SUBBACK, "<./subback.txt" or die; while (<SUBBACK>){ if(/(\d*),(.*),(\d*)/){ my $jp = $2; Jcode::convert( \$jp , 'utf8', 'sjis'); $rss->add_item( title => "$jp", link => "http://example.com/cgi-bin/bbz/main.cgi", description => "$3", ); } } close SUBBACK; print "Content-type: application/xml\n\n"; print $rss->as_string;
やっと書けた・・・。utf8フラグだのなんだのと悩んだが、
encode_output => 0
がポイントだったようだ。
ある方のソースを参考にさせてもらったのだが、そのままではうまくいかず、
use utf8; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8";
を、以下のようにした。
use encoding 'utf8';
めんどくさいねえ・・・。この辺も、仕様じゃなくてバグが潜んでるんじゃないかと思えてならない・・・。
あと、cgiはいきなりサーバーにあげず、とりあえずwinで動かしてエラーがないことくらいは確認するようにした。さくらと同じ環境をローカルに作れば一番いいんだよな・・・virtual pcでできるかな?