文字コードを自動的にチェックしてテキストを取得する[perl編]
実は文字コードは、かなり色々あるのですが、基本的には3つです。
- ShiftJIS
- UTF-8
- EUC-JP
ですね。
個人的にはEUC-JPが好みですが、
世の中のUTF-8化の流れには逆らえませんね・・・。
ShiftJISはWindowsがしつこく使用しているので無くなりそうにありません。
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; use Jcode; # urlを指定する my $url = 'https://www.pref.shizuoka.jp/'; #my $url = 'http://www.jalan.net/kankou/210000/'; # IE8 my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"; # LWPを使ってサイトにアクセスし、HTMLの内容を取得する my $ua = LWP::UserAgent->new('agent' => $user_agent); my $res = $ua->get($url); my $content = $res->content; # 文字コードを調べる my $code = Jcode::getcode($content); if ( $code ne 'utf8' ){ $content = Jcode::convert( $res->content ,'utf8' , $code); } # HTML::TreeBuilderで解析 my $tree = HTML::TreeBuilder->new; $tree->parse($content); # DOM操作 my @items = $tree->find('html'); print $_->as_text."\n" for @items;
具体的に見てみましょう。
まず文字コードをチェックします。
my $code = Jcode::getcode($content);
UTF8の場合には変換しなくていいので、UTF8以外のときだけ変換するようにします。
if ( $code ne 'utf8' ){ $content = Jcode::convert( $res->content ,'utf8' , $code); }
変換元の文字コードを第3引数に入れています。
第3引数は省略できるのですが、たまにうまく変換できないことがあるため、入れています。
ディスカッション
コメント一覧
まだ、コメントがありません