はてダとRuby1.9とMechanizeと

編集画面(http://d.hatena.ne.jp/はてなID/edit)で失敗する。
MechanizeのHTMLの実体参照を戻す関数でエンコーディング回りの例外が起きるからだ。

結論から言うと、これで回避できた。

require 'www/mechanize/util'

class << WWW::Mechanize::Util
  org = instance_method(:html_unescape)
  
  define_method :html_unescape do |s|
    m = org.bind(self)
    begin
      m.call s
    rescue ArgumentError
      m.call s.force_encoding(NKF.guess(s))
    end
  end
end

どうも編集画面の「保存する」ボタンの「保存する」が UTF-8 なのに US-ASCII で寄越されてたので invalid byte sequence と。