犬ターネット

Windows 環境だと setlocale(LC_ALL, 'ja_JP.UTF-8') が効かない

2015-12-18 php windows

Microsoft Excel で編集した Shift_JIS の csv ファイルを PHP でパースする場合、

ってのが常套手段なんだけど、これは Unix 環境では動くけど、Windows環境では動かない。いや、正確には PHP5までは動いていたんだけど、PHP7になってからは動かなくなってしまった。偶然動いていたのかも。ソースは追ってないからわからないけど。

そもそも、Windows では setlocale(LC_ALL, 'ja_JP.UTF-8') は効かない。MSDNにも以下のように記述されている。

「UTF-7 または UTF-8 のコード ページ値を指定すると、setlocale は失敗し、NULL を返します。」
https://msdn.microsoft.com/ja-jp/library/x99tb11d.aspx

ということで、Windows でも Unix でも動くような Shift_JIS csvパーサは以下のようにしないとダメ。

https://gist.github.com/mgng/76061cdafa818d51a93b

開発環境は Windows、デプロイ先が Unix ってのは結構多いと思うから気をつけたい。

散歩中に出会った野良猫の写真まとめ(11枚)
スクワット