From: Takeyuki Fujioka Date: 2010-10-06T10:13:56+09:00 Subject: [ruby-dev:42339] [Ruby 1.9-Bug#3909][Open] CGI.unescape("あ%E3%81%82")で例外 Bug #3909: CGI.unescape("あ%E3%81%82")で例外 http://redmine.ruby-lang.org/issues/show/3909 起票者: Takeyuki Fujioka ステータス: Open, 優先度: Normal 担当者: Takeyuki Fujioka, Target version: 1.9.x ruby -v: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0] tDiaryの方で例外が起きるという報告がありました。 irb(main):004:0> CGI.unescape("あ%E3%81%82") Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT from /usr/local/ruby-trunk/lib/ruby/1.9.1/cgi/util.rb:17:in `gsub' from /usr/local/ruby-trunk/lib/ruby/1.9.1/cgi/util.rb:17:in `unescape' from (irb):4 from /usr/local/ruby-trunk/bin/irb-trunk:12:in `
' かずひこさんによると、 --- cgi/util.rb.orig +++ cgi/util.rb @@ -15,8 +15,8 @@ # # => "'Stop!' said Fred" def CGI::unescape(string,encoding=@@accept_charset) str=string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/) do - [$1.delete('%')].pack('H*') - end.force_encoding(encoding) + [$1.delete('%')].pack('H*').force_encoding(encoding) + end str.valid_encoding? ? str : str.force_encoding(string.encoding) end でなおるとのことです。 ---------------------------------------- http://redmine.ruby-lang.org