プログラムで使用する CSV ファイルを作るために、
もらっている Excel ファイルから CSV に出力して
PHP で処理するとおかしな挙動をしています。
はて…なんやこれ?
ずっとあ~でもない、こ~でもない…
手詰まりか?と思っていたのですが、
Excel での UTF-8 出力時には
BOM が必ず付与されます。
BOM とは Byte Order Mark の略で、
エンディアン(バイトの並び順)によって
です。
データの解釈が変わるエンコーディング
ただし UTF-8 で使用する際には影響を受けないので、
本来は必要ないようです。
実際 UFTF-8 の普段使いの時には BOM なしで使用しています。
ただ、Excel 2024 でも BOM の有無については選べず、
強制的に付与されてしまうようです。
この BOM 、ファイルの先頭に付くので、
CSV ファイルの一行目の先頭のデータに付くので、
当然他の行と扱いが変わってきます。
わかってしまえば、当たり前なのですが、
テキストファイルで開いても BOM の存在は見えず、
一般的に UTF-8 のファイルを扱う時には
BOM なしでやろうね…ということが多いのに、
まさか Excel が BOM 付きで吐いてくるとは…