開発したアプリなど一覧

Ruby で日本語を含む URL を読み込むと URI must be ascii only と言われた

記事内にアフィリエイトリンクを含む場合があります

Ruby を用いたスクリプトで日本語を含む URL を開こうとしたところ、以下のように "URI::InvalidURIError (URI must be ascii only..." というエラーが表示された。

irb(main):001:0> require 'open-uri' => true irb(main):002:0> url = 'https://loumo.jp/?s=ほげ' => "https://loumo.jp/?s=ほげ" irb(main):003:0> o = open(url) Traceback (most recent call last): 6: from /Users/ryomatsu/.rbenv/versions/2.5.0/bin/irb:11:in `<main>' 5: from (irb):5 4: from /Users/ryomatsu/.rbenv/versions/2.5.0/lib/ruby/2.5.0/open-uri.rb:34:in `open' 3: from /Users/ryomatsu/.rbenv/versions/2.5.0/lib/ruby/2.5.0/uri/common.rb:237:in `parse' 2: from /Users/ryomatsu/.rbenv/versions/2.5.0/lib/ruby/2.5.0/uri/rfc3986_parser.rb:73:in `parse' 1: from /Users/ryomatsu/.rbenv/versions/2.5.0/lib/ruby/2.5.0/uri/rfc3986_parser.rb:21:in `split' URI::InvalidURIError (URI must be ascii only "https://loumo.jp/?s=\u307B\u3052")

"ascii only" なので日本語だけがダメというわけでなく、URI は全て ASCII 文字列でないとダメのようだ。Ruby でこのように URL に日本語を含める場合に、URI.encode メソッドを利用する必要がある。

irb(main):004:0> url = URI.encode 'https://loumo.jp/?s=ほげ' => "https://loumo.jp/?s=%E3%81%BB%E3%81%92" irb(main):005:0> o = open(url) => #<Tempfile:/var/folders/z4/z98_tjg90dl3pw4bk5_m4_tw0000gn/T/open-uri20180627-13977-xwy9zi>

これならちゃんと開ける。

Sponsored Link

コメント

  1. よねぴ より:
タイトルとURLをコピーしました