畠山さん

Marshal.load [1] の第 2 引数に、String オブジェクトの場合は
エンコーディングを UTF-8 にする (それ以外の場合は何もしない)、という
proc を渡すというのはどうでしょうか?

 data = Marshal.load( source, ->( obj ) {
   if obj.is_a? String
     obj.force_encoding( "UTF-8" )
   end
   obj
  } )

[1] http://www.ruby-doc.org/core-1.9.2/Marshal.html#method-c-load

-- 
信岡 ゆう (NOBUOKA Yu)