Webから得た情報をCSVファイルに出力するシステムを、先日引越しいたしました。
そしたら大問題が発生。なんとCSVファイルのデータで日本語だけが消失してしまったのです。
デバッグしてみたところ、ファイルの読み込みで失敗していました。
関数「fgetcsv()」でデータを読み込み、プログラムで処理した後、再び関数「fputcsv()」で同一ファイルに書き込むということをしていたのですが、読み込みの時点で日本語が欠落していました。
Webで調べてみるとすぐに原因が分かりました。
どうやら「fgetcsv()」はローカル設定に依存しているようです。つまり、今回の私の場合は、引越し前後のサーバ設定が異なっていたために、このような問題が発生したようです。
このような場合、以下のようにして「fgetcsv()」が呼ばれる前に、「setlocale()」でサーバ設定を「UTF-8」に変更してしまいます。
setlocale(LC_ALL,'ja_JP.UTF-8'); while (($data = fgetcsv($this->fp)) !== FALSE) { /* 処理 */ }
その他にもCSVデータの日本語をダブルクォーテーション「”」で囲むなどして回避できるようですが、CSVファイルを直接開いて置換をかけたり、プログラムに「”」で囲む処理を追加したりなどの手間を考慮すると、とりあえず前者で問題ないように思います。
コメントする