params[:file].readでCSV文字列が取れる。 エンコーディングは ASCII-8BIT (バイナリ)。 UTF-8でない場合はShift_JIS (CP932) なデータがアップロードされている、とみなして force_encoding する アプリケーション内では UTF-8 で扱いたいのでさらに encode する
if request.xhr?
csv_str = request.raw_post
else
csv_str = permitted_params[:file].read
end
csv_str.force_encoding(Encoding::UTF_8)
if !csv_str.valid_encoding?
csv_str.force_encoding(Encoding::CP932)
csv_str.encode!(Encoding::UTF_8)
end