Mechanizeでエンコーディングの推測に失敗するとき

Shift-JISのページをMechanizeでスクレイピングしようとしたら、日本語が上手く扱えてなくてちょっとはまった。


文字列の中身としてはShift-JISのバイト列っぽいのだけど、エンコーディングUTF-8なものが取れてきてしまう。
HTMLのmetaタグでcharsetが指定されてなくて、エンコーディングの推定に失敗している?

agent = Mechanize.new
agent.get(url)
text = agent.page.at('div[...]/span[...]').inner_text
puts text.encoding                                    # => UTF-8
puts text                                             # => ŠG–{E’n–


Ruby1.9で導入された外部エンコーディングを指定するとよいのかなと思ったけど違った。
Mechanizeはそのへん関係ないらしい。


pageオブジェクトのencodingを適切に指定するとうまくいった。
http://w.livedoor.jp/ruby_mechanize/d/Mechanize%3a%3aPage#encoding=

agent = Mechanize.new
agent.get(url)
agent.page.encoding = 'Shift_JIS'                     # この行を追加
text = agent.page.at('div[...]/span[...]').inner_text
puts text                                             # => 絵本・地獄