Project

General

Profile

Bug #8995

Updated by nobu (Nobuyoshi Nakada) about 11 years ago

=begin 
 Rails の以下のコードの結果が 2.0 と 2.1 とで異なるようです。 

 ((<encode_params|URL:https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_dispatch/http/parameters.rb#L51>)) https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_dispatch/http/parameters.rb#L51 

 以下が最小ケースです。 

  $ ruby -v 
  => ruby 2.1.0dev (2013-10-07 trunk 43160) [x86_64-darwin12.5.0] 
  $ ruby -rstringio -e "Encoding.default_internal = Encoding::UTF_8; p StringIO.new(File.read('x.jpg')).readbyte" 
  => 255 
  $ ruby -rstringio -e "Encoding.default_internal = Encoding::UTF_8; p StringIO.new(File.read('x.jpg').force_encoding('UTF-8').encode\!).readbyte" 
  => 239 

 なお、2.0 ではそれぞれの値が変化しませんでした。 

  $ ruby -v 
  => ruby 2.0.0p326 (2013-10-05 revision 43144) [x86_64-darwin13.0.0] 
  $ ruby -rstringio -e "Encoding.default_internal = Encoding::UTF_8; p StringIO.new(File.read('x.jpg')).readbyte" 
  => 255 
  $ ruby -rstringio -e "Encoding.default_internal = Encoding::UTF_8; p StringIO.new(File.read('x.jpg').force_encoding('UTF-8').encode\!).readbyte" 
  => 255 

 rails の該当箇所は rails4 でも同じ処理を行っているので、このままだと post で画像などを送るともれなく壊れてしまいます。 

 rails のコードがよくないのか、File.binread を使って読み込んでないのがおかしいなど教えて頂けると嬉しいです。 

 =end

Back