LC_CTYPEをJapanese_Japan.65001(UTF-8)にできない

ロケールに依存する文字列処理があるので、UTF-8にしたくて

setlocale(LC_CTYPE, "Japanese_Japan.65001");

とかやってみたんだけど失敗する。
ちなみにLC_ALLに対して指定するとこんな感じになる。

LC_COLLATE=Japanese_Japan.65001
LC_CTYPE=Japanese_Japan.932
LC_MONETARY=Japanese_Japan.65001
LC_NUMERIC=Japanese_Japan.65001
LC_TIME=Japanese_Japan.65001

LC_CTYPEだけ変わらない。
ぐぐってみた感じだとLC_CTYPEだけは変えられないっぽい。

やりたいことって

まぁ要するにPHPのfgetcsvでUTF-8を読みたかっただけなんだけど。
さて、どうするかな。

  1. ファイルをCP932に変換→fgetcsv→UTF-8に戻す。
  2. ストリームフィルタでCP932に変換しながらfgetcsv→UTF-8に戻す。
  3. Windowsなんて知らない。


ああ、でもCP932だとおかしくなりそうだな……。