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"
てな具合.


© 2024 KMIソフトウェア