@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Rails Shift_JIS な CSV アップローダを作るときの注意点

  • (当たり前だが) form は enctype="multipart/form-data" にすること。 form_tag foo_path, multipart: true
  • params[:file] で ActionDispatch::Http::UploadedFile インスタンスがとれる
  • params[:file].read でデータが String でとれる
    • エンコーディングは ASCII-8BIT (バイナリ)
  • 実際は Shift_JIS (CP932) なデータがアップロードされている、とみなして force_encoding する
  • アプリケーション内では UTF-8 で扱いたいのでさらに encode する
  • CSV.parse のオプション headers: true は必要に応じて。 row_sep は無くても \r\n を解釈してくれた

https://github.com/kyanny/playground/blob/gh-pages/upload_sjis_csv/README.md

https://github.com/kyanny/playground/blob/gh-pages/upload_sjis_csv/app/controllers/welcomes_controller.rb#L8-L29