商品データを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辞典」
By じびき 2006/12/23 土曜日 - 23:35:34
えっ、そんな問題があったのですね。私が作った子供文庫のHPも、エクセルで作ったSJISのCSVファイルの読み込みをやっているので、チェックしてみなくては。
ちなみにこっちで出た問題は、セルの中に改行が行っていると、CVSファイルにもそのまま改行が入ってしまい、以降の読み込みがおかしくなってしまうというのがありました。
By 管理人 2006/12/24 日曜日 - 3:09:02
私のも今回初めて出たんです。たまたま該当する文字コードが使われていなかっただけだったんですけどね。日本語の扱いは難しいですね。
By じびき 2006/12/27 水曜日 - 23:41:35
本当に日本語(マルチバイトキャラ)の扱いには苦労させられます。UTF-8がもっと浸透してくれる事を祈りつつ、自分でもなるべくUTF-8を使う様に心がけてます。
うちのブログからトラックバックを出したんですけど、来ていないみたいですね。うーん、こっちも難しい。
冬休みは時間があれば、jibiki.jpへの引っ越しを行う予定です。