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読み込み時の文字化け

  1. じびき says:

    えっ、そんな問題があったのですね。私が作った子供文庫のHPも、エクセルで作ったSJISのCSVファイルの読み込みをやっているので、チェックしてみなくては。
    ちなみにこっちで出た問題は、セルの中に改行が行っていると、CVSファイルにもそのまま改行が入ってしまい、以降の読み込みがおかしくなってしまうというのがありました。

  2. 管理人 says:

    私のも今回初めて出たんです。たまたま該当する文字コードが使われていなかっただけだったんですけどね。日本語の扱いは難しいですね。

  3. じびき says:

    本当に日本語(マルチバイトキャラ)の扱いには苦労させられます。UTF-8がもっと浸透してくれる事を祈りつつ、自分でもなるべくUTF-8を使う様に心がけてます。
    うちのブログからトラックバックを出したんですけど、来ていないみたいですね。うーん、こっちも難しい。
    冬休みは時間があれば、jibiki.jpへの引っ越しを行う予定です。

コメントをどうぞ

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>