PHP4 CSV読み込み時の文字化け

商品データをCSVからfgetcsv関数を使って読み込んで使っていたが文字化けが発生。どうやら「十(漢数字の10)」の文字で化けているらしい。原因をネットとかで調査。SJISでバックスラッシュ(or ¥)に相当する5Cというコードを含んでいる文字がいくつかあって「十」もその一つだった。CSV中の文字列はダブルクォーテーションでくくっていたので「十」の後ろのダブルクォーテーションがエスケープされてしまい以後の読み込みが変てこに。

まず浮かんだ解決策はCSVの大本のEXCELファイルをEUCにしてもらうこと。CSVから読み込むときにEUC→SJIS変換する必要があるがこれが一番簡単。残念ながら他部署がからんでいるので不可。次の案はCSVを丸ごと読み込んでEUCに変換して別のファイルとして書き出すプログラムを作成、元のプログラムではCSV読み込み時にEUC→SJIS変換をすれば良い。で、これで行くことに。

あたらに作るプログラム
CSVファイルを読み込む
文字コードをEUCに変換
別のファイルとして書き込む

元のプログラムの変更点
EUCに変換されたCSVからデータを読み込んだあとEUC→SJIS変換する

以上。

PHPの参考書
PHP辞典

This entry was posted in PHP. Bookmark the permalink.

3 Responses to "PHP4 CSV読み込み時の文字化け"

コメントを残す

メールアドレスが公開されることはありません。