No.315


【Excel】UTF-8のCSVファイル

文字コードUTF-8のCSVファイルを開きたい

 一昔前はCSVといえばSJISが標準だったけど、最近ではUTF-8のデータもよく見かける。
 最近のシステムはUTF-8で稼働するようになっているものが多いので当然な結果だ。

 ところがこのUTF-8のCSVファイル、Excelで開けるものと開けないものがある。
 最近でもとあるシステムの開発でCSVダウンロード機能があり、そのCSVファイルが開けないというバグレポートが来た。Excelで開くと文字化けしてしまうとのこと。

 原因は簡単で、ファイルの先頭にBOM(Byte Order Mark)をつけていないから。

 BOMがついている場合、Excelは自動的に文字コードをUTF-8として認識してくれる仕様になっている。ダウンロード処理に一手間加えてExcel対応CSVファイルを作成しよう。


PHPでBOMをつける

 下記のバイナリデータをつけてやればOK。

pack('C*',0xEF,0xBB,0xBF)

 処理に応じてechoするなりfputするなりしよう。


テキストエディタでBOMをつける

 Windows標準のテキストエディタは保存時にUTF-8のBOMを自動で追加する。これを利用すればExcelでCSVを開けるようになる。

 その他のテキストエディタでも保存時にBOMをつけることができるはず。