2012-05-09 9 views
7

ここに問題があります:RubyのURIライブラリはウムラウトを扱いません。すなわちruby​​のURIライブラリでウムラウトを使用する方法

irb> require "uri" 
irb* URI("http://abc.de/äöü") 
URI::InvalidURIError: bad URI(is not URI?): http://abc.de/äöü 

どうすれば対処できますか?これはRuby 1.9.2、btwです。

+0

これは、ウムラウトを持つものだけでなく、他のユニコード文字でも発生します。 –

+2

ライブラリーの権利では、これらの文字はurisでは不正です。あなたはそれらをエスケープする必要があります。 –

+1

ブラウザはURLのウムラウトをうまく処理できます。どのようにブラウザが何をしますか? – radiospiel

答えて

13

コールURI.encode解析の前に:

require 'uri' 
uri = URI(URI.encode("http://abc.de/äöü")) 

側の注意点としては、URLが(を#something)ハッシュフラグメントが含まれている場合、あなたはそれを手動で分割する必要がありますので注意してください

require 'uri' 
uri = URI(URI.encode('http://example.com/page.html') + '#' + URI.encode('anchor')) 
+0

これはすばらしいです!私は完全にAddressableを使いたくなかったし、ここではURIを持つ有効な解決策だ。 – ujifgc

4

Addressable宝石は、IRIに対処するために使いたいものです。

+0

素晴らしい、魅力のように動作します。 – radiospiel

+0

それから、他の人にも分かるように答えを受け入れるべきだから、Seanは新しい評判のポイントを手に入れることができます。 :) – vlasits

+0

申し訳ありませんが、私はそれを自動的に受け入れる答えをupvotingと思った。これは今修正されており、次回はそのことを覚えておいてほしいと思っています;) – radiospiel