mechanize encoding error : input conversion failed due to input error, bytes 0xFD 0xFE 0x2D 0x2D が出たときは

http://w.livedoor.jp/ruby_mechanize/d/Mechanize%3A%3APage

フォーム送信をする場合は Mechanize は #encoding の返り値(この場合 UTF-8)に変換して送信しようとするので、一般的な Web ブラウザの挙動「なにもなければフォームの書かれたHTMLの文字エンコーディングでデータを送る」と食い違ってしまいます。これが問題になる場合はフォーム送信直前に Mechanize::Form#page の encoding= メソッドで本来のエンコーディング名(でIconvが読めるもの)を指定します。

agent.get(uri)
# 全体を kconv で変換してしまう
agent.page.body = agent.page.body.toutf8
agent.page.encoding = 'UTF-8'

agent.page.form_with(:name => 'f1'){|form|
...
form.page.encoding = 'CP932' # 本来の文字エンコーディング名
form.click_button
}