26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】CSVをエクスポート→エクセル で文字化け問題

Last updated at Posted at 2015-03-20

** 結論から言うと出回ってる解決策では、完璧には解決しないように思われます。
いろいろ解決策求めてここにたどり着いた方は、一番下に書いた結論のように方向転換して調査することをお勧めします。

以下概要。

問題

CSV形式で作成したファイルの日本語文字が、ダウンロードからダブルクリックすると(railsのデフォルト文字コードutf-8だと)エクセル上で文字化けしてしまう。

原因

いたってシンプル。
エクセルが、utf-8に対応していないから。

解決策らしきもの

以下解決策らしかったけど解決してくれなかったもの。

Mac版エクセルでも、Win版エクセルでも両方対応するためには、UTF-16LEでないといけないらしい。
→ 記事通りにencode変える+BOMつける。

def csv_download
  column_names = ["事業部名"]
  bom = "\xFF\xFE".force_encoding("UTF-16LE")
  respond_to do |format|
    format.csv{ send_data bom + column_names.to_csv.encode("UTF-16LE"), filename: "filename.csv", type: 'text/tsv' }
  end
end

これで,UTF-16LEの文字コードのファイルをダウンロードすることに完了。(ダウンロードして、そのファイルの文字コードがUTF-16LEだった。)

file --mime fliepath

でencode確認できる。

charset=utf-16le

ダウンロードしたやつが、utf-16leだった!!きた!!!!

(file --mineでencode確認してるが、それでうまくいかないときはnkfっていうのinstallして、nkf --guessとかでみれる。)

しかし!!!これをmacエクセルで開くと。。。。

"業"が化けてる...。

たしかに、他の文字で試したところ、ほとんど化けないことのほうが多い、だから、記事でUTF-16LEがいい!って言ってる人らは勘違いしてると思われる。

現状調べている感じでは、UTF-16LE以外に、日本語onCSV→excelでうまくいきそうな文字コードは見つかってない。しかし、UTF-16LEを使っても文字化けする文字は上記のように存在するので、それを使うのは少々危険すぎるかと。

結局どうすればいいか

① 英語のみにする。日本語とかいうマイナー言語使わん。
② csvで出力するのをやめる。Excelとか。(やめた場合、他の形式で文字化けなくうまくいくかは調査の必要あり。)
③ UTF-16LE以外でうまくいきそうな文字コードを見つける
の3策。好きなものを選びましょう。

26
25
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?