Posted on

ダウンロードしたCSVファイルが文字化けする問題

CSVファイルをダウンロードしたら文字化けするとお客様から連絡があり調べたところ、テストサイトではSHIFT_JISでダウンロード出来ていた所が何故かUTF-8でダウンロードされているようになってしまっていました。



UTF-8のファイルをSHIFT_JISで開きなおすと一応文字化けは直るのですが先頭に「・ソ」という表示が知らぬうちに付いていました。


CSVファイルをダウンロードしたら文字化けするとお客様から連絡があり調べたところ、テストサイトではSHIFT_JISでダウンロード出来ていた所が何故かUTF-8でダウンロードされているようになってしまっていました。



UTF-8のファイルをSHIFT_JISで開きなおすと一応文字化けは直るのですが先頭に「・ソ」という表示が知らぬうちに付いていました。



インターネットで調べてみたら原因は・・・



UTF-8で書かれているPHPファイルをメモ帳で編集して保存をすると、先頭にBOM(Byte Order Mark)が負荷されて保存されてしまいます。

このBOMはPHPのechoでheaderを出力する前に出力されてしまうのでCSVにもこのBOMがきっちり先頭に付いてきちゃうという事でした。

CSVにBOMが付いてくるとSHIFT_JISで開かれるはずのCSVファイルがUTF-8で開かれてしまうので今回の現象が起きたというわけです。



というわけで改修作業ですが、BOMが負荷されたPHPファイルを見つけ出して先頭のBOMファイルを取り除いてあげます。

このファイルを上げなおしてあげると、きちんと文字化けせずにCSVのダウンロードできるようになりました。



UTF-8で開発している時はメモ帳で編集するなという教訓が出来ました・・・



今回は以下のサイトを参考にさせていただきました。

Keep It Simple, Stupid!

http://takesita.seesaa.net/article/96553793.html



Sun Limited Mt.

http://www.syuhari.jp/blog/archives/384