エクセルの仕様なのか、何も考えずにUTF-8のファイルエクセルで開くと、標準文字コードで開くため、だいたいの確率で文字化けします。
ちなみにShift JISであれば、問題なく開けます。
対策としては、適当なテキストエディタなどで開いて、UTF-8(BOM付き)で一度保存すれば、次からはエクセルでも文字化けせず問題なく開くことが出来ます。
このことから、コンテンツの最初にBOMをつけてやれば、ダウンロード後すぐにエクセルで文字化けなく開くことが出来ます。
動的出力するCSVファイルであれば、対策は簡単です。以下はPerlでの例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# このファイルはUTF-8で作成 # CSVのコンテンツ作成 my $csv = "aaa, bbb,ccc, あいうえお, 아이우에오"; # 先頭にBOMを追加 $csv = "\xEF\xBB\xBF" .$csv; # 出力 print <<EOM; Content-Type: application/octet-stream Content-Disposition: attachment; filename=hoge.csv $csv EOM |
たったこれだけです。
なお、他サイトなどで、BOMは”0xFE 0xFF”などと紹介しているところがありますが、”0xFE 0xFF”はUTF-16のBEエイディアンのBOMであり、UTF-8のBOMは”0xEF 0xBB 0xBF”ですのでご注意ください。
テキストエディタだと”0xFE 0xFF”をつけてもちゃんと解釈してくれることがありますが、エクセルの場合は”0xEF 0xBB 0xBF”を付けないとダメ見たいです。
参考サイト)
- https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF
- http://nantokaworks.com/p687/
- http://perl48.hatenablog.com/entry/20140907/1410083729