Ruby - トラブルシュート - # つきの URI がエラーになる

クラウディア 
1. # つきの URI がエラーになる
2. 解決策

1. # つきの URI がエラーになる

 こういうリンク先のとき「https://freebsd.sing.ne.jp/lang/ruby/99/02.html#1.」。  これを下記のようなソースを書いて開こうとすると例外発生となります。

#!/usr/bin/env ruby

=begin

URI をオープンしてみる

=end

require 'open-uri'

begin
  uri = URI.encode('https://freebsd.sing.ne.jp/lang/ruby/99/02.html#2.1')
  uri = URI.parse(uri)

  html = open(uri).read
rescue => error
  puts("例外発生[#{error.class}]")

  error.backtrace_locations.each do | line |
    puts("#{line}")
  end

  puts("[#{there.class.name}][#{error.message}]")
end
 12行目を下記のように書けば、意図通りに動きます。

  uri = URI.encode('https://freebsd.sing.ne.jp/lang/ruby/99/02.html')
 実際にブラウザでリンクをクリックすれば開くので「#1.」の箇所へと飛ぶので、ブラウザに何か仕掛けがあるのでしょうね。  ブラウザのソースをハックしたことはないのです。

2. 解決策

 わたしなりの解決策として、上記のような場合は「https://freebsd.sing.ne.jp/lang/ruby/99/02.html」と「2.1」とに分けて  「https://freebsd.sing.ne.jp/lang/ruby/99/02.html」を開いてドキュメントを取得して、内部の「id」として「2.1」が定義されているかをチェックするようにしました。