FC2ブログ

2015年11月の記事 (1/1)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

カミングスーん

響のリニューアルで、鬱で死にたいです


せっかくダウンロード機能をつけたのに。
やり直しする気が起きない今日この頃。


下手な考え、休むににっこり。
スポンサーサイト

XML::Simple を日本語で使おうとして苦労した

Perlは日本語を扱えない言語である


私はPerlが好きで、結構いろんなものを書いたりしてます。
そこで、問題となるのは、日本語。
Perlは、日本語を扱うことができません。

それでも、Perlを使おうと悪戦苦闘してるわけです。
そして、今日もまた躓きました。


XML::Simple な


radikoの番組表を読み込もうとしてはまりました。 utf8のXMLをつっこんで、出てきたものは化けている。
で、早速ですが、おこたえ。
   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});
use utf8; で書いております。
$xmlf にダウンロードした番組表を入れて decode_utf8 でデコード。
ここまでは普通。

次に、XML::Simple に入れる前に encode_utf8 でエンコード。
まあそういうこともある。

そして出てくるデータは内部コードのutf8(!?)

私が使っているのはwindowsのperlなので、cp932でエンコードします。
最後は文字化け無し。

なんでやねん。2時間くらい悩んだんですけど(おこ!)

いくら勉強しても、Perlを扱っている時間の半分は文字コードの不具合ですよ。

どうなの。ほかの言語はどうなの。


Perlで日本語を扱ってはいけません。
全部英語で書きましょう。
(でも、これからもPerl使うけど)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。