diff options
-rw-r--r-- | lib/uri/rfc2396_parser.rb | 4 | ||||
-rw-r--r-- | test/uri/test_parser.rb | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/uri/rfc2396_parser.rb b/lib/uri/rfc2396_parser.rb index a6e5df91f9..6a2d819152 100644 --- a/lib/uri/rfc2396_parser.rb +++ b/lib/uri/rfc2396_parser.rb @@ -329,7 +329,9 @@ module URI # Removes escapes from +str+ # def unescape(str, escaped = @regexp[:ESCAPED]) - str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(str.encoding) } + enc = str.encoding + enc = Encoding::UTF_8 if enc == Encoding::US_ASCII + str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) } end @@to_s = Kernel.instance_method(:to_s) diff --git a/test/uri/test_parser.rb b/test/uri/test_parser.rb index b9cf4b7e1a..088628a3fb 100644 --- a/test/uri/test_parser.rb +++ b/test/uri/test_parser.rb @@ -50,6 +50,7 @@ class URI::TestParser < Test::Unit::TestCase p1 = URI::Parser.new assert_equal("\xe3\x83\x90", p1.unescape("\xe3\x83\x90")) assert_equal("\xe3\x83\x90", p1.unescape('%e3%83%90')) + assert_equal("\u3042", p1.unescape('%e3%81%82'.force_encoding(Encoding::US_ASCII))) assert_equal("\xe3\x83\x90\xe3\x83\x90", p1.unescape("\xe3\x83\x90%e3%83%90")) end end |