Ruby1.9だからなのかどうかわからんが,EUC文字列をURLエンコードしたものを,URI.decodeでうまくURLデコードできなかった.それで自作するハメになった.
Ruby初心者なもので,かなり泥臭い.Ruby 1.9.1で動作確認.
URLエンコード
str.gsub(/([^a-zA-Z0-9_\-\.~])/) { "%#{$1
.unpack('H*'
)[0].scan(/../).join('%'
).upcase }" }
URLデコード
str.tr('+'
,' '
).gsub(/%([A-Fa-f0-9][A-Fa-f0-9])/) { [$1
.hex].pack('C'
) }
見るからに遅そう...orz
うちのWikiのようにEUC-JPでエンコードしている場合は,こんな感じで.
#!/usr/local/bin/ruby
uri = "%A5%CD%A5%C3%A5%C8%A5%B2%A1%BC%A5%E0%A4%CE%B3%AB%C8%AF%B4%C4%B6%AD"
# デコード
d_uri = uri.tr('+'
,' '
).gsub(/%([A-Fa-f0-9][A-Fa-f0-9])/) { [$1
.hex].pack('C'
) }
d_uri.force_encoding("EUC-JP"
)
p d_uri
# エンコード
e_uri = d_uri.gsub(/([^a-zA-Z0-9_\-\.~])/) { "%#{$1
.unpack('H*'
)[0].scan(/../).join('%'
).upcase }" }
p e_uri
実行すると,
"ネットゲームの開発環境"
"%A5%CD%A5%C3%A5%C8%A5%B2%A1%BC%A5%E0%A4%CE%B3%AB%C8%AF%B4%C4%B6%AD"
てな具合.