まめ畑

ゆるゆると書いていきます

mechanizeで日本語が壊れる

先日、サーバのmechanizeのバージョンを0.9.0(最新版)に更新したらはまったのでメモ。


ニコ割ゲームランキングのゲーム名取得のためmechanizeで日本語が壊れるを使ってたのですが、0.7.6から0.9.0に更新したら日本語が壊れて取得できなくなった。
文字コードが上手く認識されないのかと思い、KconvNKFを使ってUTF8に変更しようとしてもだめ、じゃあ、この文字コードはなんだ!と思い、chardetを使って文字コードを確認してみた。
確認方法は
まずchardetをgemで入れます。

gem install chardet

使い方は

require "rubygems"
require "UniversalDetector"

hoge = "おれは何だ?"
p UniversalDetector.chardet(hoge)

とすると、文字コードと推定の信頼度が返ってきます。


やった結果、信頼度99%でUTF8・・・。


mechanizeのオブジェクト.titleとかしても文字化け・・・。
p mechanizeのオブジェクト
とかしてみたら、見事に日本語が完全に崩壊状態。


外部ファイルに取り出した日本語を書き出すとバイナリファイルでっせと言われる始末。
色々やった結果、mechanizeを以前のバージョンに戻す事にした。
戻したところ完全に解決。
日本語としてきちんと取り出せた。


gemで入れたライブラリにバージョン指定は

require "rubygems"
gem "mechanize", "=0.7.6"
require "mechanize"

な感じで、読み込みたいライブラリの前にバージョンの指定を入れる。
不等号でも可能なんだけど、今回は指定バージョンを読み込みように設定。


インストール時にバージョンを指定するなら

sudo gem install mechanize --version '= 0.7.6'

とすればおk。


さて、バグかな?
調べても特に見つからないんだよなぁ。
マルチバイトも字が崩壊している印象だった。

もう少し調べてみよう。