Perlは日本語を扱えない言語である
私はPerlが好きで、結構いろんなものを書いたりしてます。
そこで、問題となるのは、日本語。
Perlは、日本語を扱うことができません。
それでも、Perlを使おうと悪戦苦闘してるわけです。
そして、今日もまた躓きました。
XML::Simple な
radikoの番組表を読み込もうとしてはまりました。 utf8のXMLをつっこんで、出てきたものは化けている。
で、早速ですが、おこたえ。
use utf8; で書いております。my $id = 13;
my $xmluri = 'http://radiko.jp/v2/api/program/today?area_id=JP'.$id;
my $agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)';
my $timeout = 10;
my $xmlf;
for(0..3){
my $ua = LWP::UserAgent->new("agent" => $agent, "timeout" => $timeout,);
my $r = $ua->get("http://radiko.jp/v2/api/program/today?area_id=JP$id");
$xmlf = decode_utf8 $r->content;
last if $r->is_success;
sleep 5;
}
my $x = XML::Simple->new();
my $p = $x->XMLin(
encode_utf8 $xmlf,
ForceArray => 0,
KeyAttr => []
);
print encode("cp932", $p->{stations}{station}[0]{scd}{progs}{prog}[0]{title});
$xmlf にダウンロードした番組表を入れて decode_utf8 でデコード。
ここまでは普通。
次に、XML::Simple に入れる前に encode_utf8 でエンコード。
まあそういうこともある。
そして出てくるデータは内部コードのutf8(!?)
私が使っているのはwindowsのperlなので、cp932でエンコードします。
最後は文字化け無し。
なんでやねん。2時間くらい悩んだんですけど(おこ!)
いくら勉強しても、Perlを扱っている時間の半分は文字コードの不具合ですよ。
どうなの。ほかの言語はどうなの。
Perlで日本語を扱ってはいけません。
全部英語で書きましょう。
(でも、これからもPerl使うけど)
2015/11/17 (火) [perl]