Mechanize 1.0 で EUC-JP のページで文字化けが発生する

★以下の情報は副作用があります。今度は basic 認証でエラーになってしまう。現在、調べ中・・・。


www.jiji.com のスクレイピングでたまに文字化けするので調べたが分からなかった。

  • HTTP のヘッダ情報や、ページの charset を確認したが、Latin-1 の誤判定とかではない?
  • ○数字など、JIS 範囲外のコードによる Nokogiri (iconv) の変換中断ではない?

対処法

html_parser を Hpricot にして、Kconv (NKF) で UTF-8 に変換したところ安定動作している。

Mechanize.html_parser = Hpricot
agent = Mechanize.new
agent.post_connect_hooks << lambda {|params| params[:response_body] = Kconv.kconv(params[:response_body], Kconv::UTF8)}

メモ

class Mechanize
  class Page < Mechanize::File
    def initialize(uri=nil, response=nil, body=nil, code=nil, mech=nil)

    def parser
      if mech.html_parser == Nokogiri::HTML
        @parser = mech.html_parser.parse(html_body, nil, @encoding)
      else
        @parser = mech.html_parser.parse(html_body)
      end