Hatena::ブログ(Diary)

Haroperi.log

2011-04-05

Rubyで日本語を含むURLを扱う

メモっぽい記事を書くのはあまり好きではないのですが、せっかく調べたので書きます。

Ruby1.9に移行したらどうなるのかはわかりませんけど、日本語の処理に多少の不安を残すRuby1.8にとって、日本語を含むURL、例えばwikipediaなどは扱いにくいです。

Ruby検索エンジンっぽいものを作っていまして、open-uriというモジュールで日本語を含むURLを開こうとしたらエラーが出てしまいました。

ちなみに私の環境はruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]です。古そうだね。

バイト単位の処理と文字単位の処理を混同してしまうので、文字列処理は難しい。

URLエンコード

ブラウザは、URLにエスケープされた文字列が含まれていた場合それを展開して表示しているようですが、通信するときはエンコードしています。

参考 http://ja.wikipedia.org/wiki/URLエンコード

Rubyライブラリを使う

探したらあった。

require 'URI'
puts URI.encode('http://ja.wikipedia.org/wiki/陰陽')

実行結果

http://ja.wikipedia.org/wiki/%E9%99%B0%E9%99%BD

同じくURI.decodeでデコードができます。

参考 http://www.ruby-lang.org/ja/man/html/URI.html

自分で書いたコード

説明的で分かりやすいコードだと思います。

def encode url
	ret = ''
	url.split(//).each { |ch|
		if ch.size != 1
			ch.bytes.each { |ch|
				ret.concat sprintf("%%%02x", ch)
			}
		else
			ret.concat ch[0]
		end
	}
	return ret
end

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/haroperi/20110405/1301959688