カラカニのメモ帳
mindiaカラカニのメモ帳見出し語

phpでfopenした時の文字コード

kani · 2010-06-04 更新 · 1 ポイント

そんで真っ先に思いつくのが、読み込むCSVファイルのエンコーディングを事前に合わせておくことなんだけど、ものすごく無駄な感が否めないので、どうせなら読みながら変換できねーのかよ、というところで上記の話に繋がる訳だ。

fgetcsv()の中身はどうしようもないので、ファイルハンドルにiconvのストリームフィルタをかましてから渡してやればfgetcsv()が読み出す頃には既に任意の(というかロケールに合わせた)エンコーディングで読み出されて万事解決、と。

http://d.hatena.ne.jp/pasela/20081224/stream_filter

php のマニュアルの最後に "この関数はロケール設定を考慮します。" と書いてあったのを見落とし、ストリームフィルタを使うことになってしまった…

と思って確認したら、サーバーにSJISのロケール入ってないから結局ストリームフィルター使うのか。

みんなどうやって文字コード変換してるんだろうorz

コメント

akkun_choi · 2010-06-06

ストリームフィルタなんてあるんですね。
fgetcsvの使い方わからず(というかなんか動きが怪しい)、
PHPでCSVリーダー書いちゃいました。

kani · 2010-06-09

なるほど。
外部のシステムで生成したCSVファイルを読むのが億劫で、独自にCSVリーダーを書く自信もなく…
今のところストリームフィルターうまく動いてるみたいです