Mechanizeの文字コード問題を何とかやっつけた

MechanizeがEUCのページ(mixiとか)をうまく解析してくれない件で、ずっと試行錯誤していたけど、思い立ってそのあたりのソースを追ってなんとか解決した。hookが用意してあるんだけど、そのhookにメソッドを追加する方法がわからないので、むりやり押し込む。それっぽい名前のhookなので、コード変換をやるとしたらここなんだろうと思う。

class WWW::Mechanize
    def set_hook
        @post_connect_hook.hooks << Proc.new do |params|
            params[:response_body] = NKF.nkf("-wm0",params[:response_body])
            params[:response]["Content-Type"]="text/html; charset=utf-8"
        end
    end
end

agent = WWW::Mechanize.new
agent.set_hook
page = agent.get("〜〜")とか

コード変換の自動認識がうまくいかない場合に備えて、nkfのパラメータで入力の文字コードを明示指定したほうがいいだろうが、上記コードでは省いた。

2009-07-11追記:

Mechanize0.9.3で文字コード認識が改善され、この対処は不要に。

2009-11-25追記:

修正版が、id:otn:20091124 に。