- 548 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 14:17:01 ]
- >>547
open-uri は Content-Type ヘッダの charset トークンを内部で読んで force_encoding の引数に設定してくれる模様 require 'open-uri' uris = %w(sankei.jp.msn.com/ dailynews.yahoo.co.jp/ b.hatena.ne.jp/ www.2ch.net/) uris.each do |uri| res = open(uri) p "#{res.read.encoding.inspect}, Content-Type: #{res.meta['content-type']}" end results: "#<Encoding:Shift_JIS>, Content-Type: text/html; charset=shift_jis" "#<Encoding:EUC-JP>, Content-Type: text/html; charset=euc-jp" "#<Encoding:UTF-8>, Content-Type: text/html;charset=utf-8" "#<Encoding:ASCII-8BIT>, Content-Type: text/html" Ruby1.9 の Net::HTTP はそれすらやらない、本当にプレーンな HTTP クライアントという性格に結果的になったってことだな Net::HTTP のレベルで細かく処理されてたら確かに逆に面倒かもしれない 「HTTP ヘッダの Content-Type の charset があれば読んで設定、 それで valid_encoding? が偽なら meta タグの Content-Type を、 それでも invalid なら NKF.guess あたりの結果をブチ込み、 それでも invalid ならもうどうでもいいので ISO-8859-5 とかで流す」 という便利なんだか親切なんだかよくわからん HTTP クライアントは Ruby1.9 にこそあるべきだとは思う あと、>>539のencodingの値はどれもほぼデフォルト値だから、 「あーこいつなんもエンコーディング処理やってねーな」と気づくことはできるぞ
|

|