LWP::Simple の get で取ってきた文字列の文字コード
2009-11-28-2
[Programming]
さくらのサーバで cron で定期的に動かしているスクリプトにエラーが出たので調査して対処。
サーバ側の Perl モジュールがアップデートされたからだと思うのだが、LWP::Simple の get で取ってきたテキストの文字コードがある日を境に変わっていた。
対象としているアマゾンの個別商品ページの文字コードは昔も今も Shift_JIS。
今までは get した文字列の文字コードも Shift_JIS。
しかし、ここ数日は get したら内部コード(UTF-8)になってる。
なのでそれにあわせてプログラムを修正した。
旧コードはこんな感じ:
新コードはこんな感じ:
結構大きな変更なので、リリースのときにどこかにアナウンスなりドキュメントなりがあったんだろうなとは思うんだけど、探すのは後回し。
サーバ側の Perl モジュールがアップデートされたからだと思うのだが、LWP::Simple の get で取ってきたテキストの文字コードがある日を境に変わっていた。
対象としているアマゾンの個別商品ページの文字コードは昔も今も Shift_JIS。
今までは get した文字列の文字コードも Shift_JIS。
しかし、ここ数日は get したら内部コード(UTF-8)になってる。
なのでそれにあわせてプログラムを修正した。
旧コードはこんな感じ:
my $url = "http://www.amazon.co.jp/exec/obidos/ASIN/B0015AOK1O"; my $c = get($url); Encode::from_to($c, 'shift-jis', 'utf8');
新コードはこんな感じ:
my $url = "http://www.amazon.co.jp/exec/obidos/ASIN/B0015AOK1O"; my $c = get($url); $c = Encode::encode('utf8', $c);
結構大きな変更なので、リリースのときにどこかにアナウンスなりドキュメントなりがあったんだろうなとは思うんだけど、探すのは後回し。
この記事に言及しているこのブログ内の記事