なかだです。

At Sat, 14 Feb 2009 12:51:57 +0900,
MOROHASHI Kyosuke wrote in [ruby-dev:38005]:
> Ruby 1.9.1p0で、URI.decode()がうまく動かないようです。
> 一文字ずつデコードされるため(?)、マルチバイト文字を復元できていません。
> 
> $ ruby19 -Ku -ruri -ve 'p ["日本語".dump, URI.unescape( URI.escape("日本語") ).dump]'
> ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-darwin9]
> ["\"\\u{65e5}\\u{672c}\\u{8a9e}\"",
> "\"\\u{e6}\\u{97}\\u{a5}\\u{e6}\\u{9c}\\u{ac}\\u{e8}\\u{aa}\\u{9e}\""]

UTF-8決め打ちはまずいと思いますが、こういう場合って
default_externalでいいんでしょうか。


Index: lib/uri/common.rb =================================================================== --- lib/uri/common.rb (revision 22289) +++ lib/uri/common.rb (working copy) @@ -224,9 +224,9 @@ module URI end tmp - end + end.force_encoding(Encoding::US_ASCII) end def unescape(str, escaped = @regexp[:ESCAPED]) - str.gsub(escaped) { [$&[1, 2].hex].pack('U') } + str.gsub(escaped) { [$&[1, 2].hex].pack('C') }.force_encoding(Encoding::default_external) end
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦