※mechanizeのバージョンは1.0.0です。
○問題
mechanizeでhtmlをparseすると文字化けすることがあります。
○原因
・mechanizeは内部的にnokogiriを使っている
・(おそらく)nokogiriはKconvを使って文字コードを変換している
・(おそらく)webから取得したHTMLの文字コードはKconvの文字コード推定機能を使って判別している。この判別結果が間違っていることが原因。
○解決策
mechanizeからnokogiriにHTMLデータを渡す直前のところでhttpheaderのcharsetを元に文字コード変換を行う。
具体的にはresponse_body_parser.rbの23行目の部分に以下のコードを追加します。
if response['Content-Type'] =~ /utf-8/ response_body = Kconv.kconv(response_body, Kconv::UTF8, Kconv::UTF8) elsif response['Content-Type'] =~ /euc/ response_body = Kconv.kconv(response_body, Kconv::UTF8, Kconv::EUC) elsif response['Content-Type'] =~ /sjis/ response_body = Kconv.kconv(response_body, Kconv::UTF8, Kconv::SJIS) end
これで解決しました。