最近はやり方が大部スマートになってるんですね。
encoding変換部分がフックできるようになっているのでそこでUTF-8に変換すれば良いだけです。
jpegだとかを間違って処理しないようにtextという文字をContent-Typeに含む物だけを変換しています。
コンテンツ本体は、body_ioを使ってファイルストリームのように扱います。
require 'mechanize'
require 'nkf'
agent = Mechanize.new
agent.content_encoding_hooks << Proc.new do |s, uri, response, body_io|
if %r|text/html| =~ response["Content-Type"]
body_io.rewind #念のため巻き戻し(多分不要)
tmp=NKF.nkf("-Ewm0",body_io.read);# readで読み込んでEUCからUTF-8にnkfで変換
tmp.force_encoding("utf-8");
body_io.rewind #巻き戻して、utf-8で書き直す
body_io.write(tmp);
response["Content-Type"]="text/html; charset=utf-8"
end
end
0 件のコメント:
コメントを投稿