shimgo
6/18/2018 - 10:45 AM

Shift_JIS(CP932)のアップロードファイルをRailsで読み込む

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