require 'open-uri'
file = open("http://www.yahoo.co.jp/")
puts file.read # ここで固まる
# ここへ制御が移らないように見える。puts file.readをコメントすると制御が移る
上記を、ソースAの中に追加したところreadの部分で固まってしまいます。
原因を究明するため、上記のsnippetをソースAの中ではなく独立したスクリプトに記述したところ問題なくreadは成功します。
ソースAの中の他の部分が悪影響を起こしていると考えているのですが、原因を探る方法について知恵を貸して頂けないでしょうか。
別Threadで実行していたので(?)、どうも例外が見えていなかったようです。
begin rescueで囲んでみたところ、readのところで
<Encoding::UndefinedConversionError: U+798F from UTF-8 to ASCII-8BIT>
が発生していました。
情報不足申し訳ありません。
更に追記:
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]にて、
例外処理対応を追加することと、Encoding.default_internal = 'utf-8'を設定することで解決しました。
雲をつかむような質問に対して、いろいろとありがとうございました。
コメント(2件)
require "uri"
url = URI.parse("http://www.ruby-lang.org/ja/")
http = Net::HTTP.start(url.host, url.port)
doc = http.get(url.path)
puts doc
こんな感じでやらないとダメなんじゃないかな?
http://www.notwork.org/tanoshiiruby4/list/
>||
irb(main):001:0> require "open-uri"
=> true
irb(main):002:0> file = open("http://www.yahoo.co.jp/")
=> #<Tempfile:/var/folders/vb/qg4hhl_14d99j5s0kczx8r340000gn/T/open-uri20131002-9990-1yuf4cv>
irb(main):003:0> file.read
=> "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta http-equiv=\"content-type\" content=\
(長いので以下略)
||<
OSはMac OS X 10.8.5で、Rubyは以下のバージョンです。
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin11.4.2]
お使いのOSやRubyはわかりますか?