今回は文字コードの話。
結論から言うとmacとwinの番地違いだった。
mySqlから取り出したレコードをCSV形式で保存すると、そのままでは機種依存文字が文字化けする。
具体的には、CSVファイルをエクセルで使用するために、utf-8の文字列をshift-jisに変換するのだが、これを、
$str = mb_convert_encoding($str, ‘shift-jis’, ‘UTF-8’);
としてしまうと、?になったり消えてしまったりする。
色々ググった結果、
$str = mb_convert_encoding($str, ‘sjis-win’, ‘UTF-8’);
とすれば問題なく表示できる。
のだが、ここからが無意味に悩んでしまった。
なぜなら、期待通りに機種依存文字が表示されないからだ。
◯で囲った数字を1、2と入れていくと、ブラウザでの表示は問題ないがCSVで書き出し、エクセルで開くと◯に日、月となってしまい嵌ってしまった。同じように()に株を入れた場合もブラウザでは問題ないが、エクセルでは?となってしまった。
と、いうわけで最初の結論に戻るのだが、macのエクセルで開いたのがこの現象のキモで、winのエクセルでは何ら問題ない。問題なのはOS間の互換性のなさであったとさ。
えーマジ”shift-jis”!?キャハハ、キモーイ。
”shift-jis”が許されるのはXPまでだよねー。キャハハハハ