CSVで読み込んで何か処理をするという依頼は多いのですが、Excelの出力にはBOMが付きものなので、CSV読み込みはなかなかストレートにはいきません。
一般的に、UTF-8のBOM付き・無しについては、マニアックな知識になってしまうため、運用に説明するよりもそもそもBOM両対応のCSV読み込み機構を用意してしまえば話ははやい。ということで、今回作成しました。(PHPでの実装です)
方法
ネット上には、先人たちの貴重な資産(コード)が転がっていますので、さっとコピペで済まそうと思いましたが、 preg_match
等を使って読み込んだCSVファイルを編集(BOM削除)してから、再度読み込む方法が多かったです。
それでも動けば良いのですが、CSVのファイルサイズが大きいとメモリ使用量への影響が懸念されますので、 今回、ファイルポインタを使いBOMの部分をスルーして読み込む方法を試みます。
コード
PHPなのに若干C言語臭いので、あまり綺麗なコードでは無いかも知れません。