BOMとかBombとか

お久しぶりですmarcoです。


集計結果をCSVで吐き出すような簡単なスクリプトを作ったのですが、タイトルの通りBOMにやられたのでメモ書き。


BOMとは

バイトオーダーマーク - Wikipedia

ユニコード判別に使用したりする数バイトのバイナリデータですね。


BOM爆弾

さて今回CSVPHPエンコード(UTF-8Shift_jis)して吐き出すようにしたのですが
出力データがエンコードされませんでした。


いろいろ検証した結果、先頭になんかよくわからん文字化けしてるデータを発見しなんかBOMっぽいなー
ということまではわかったのですが、何故BOMがついてしまうのかわからず・・・。


最終的に、ソースファイル自体がBOM付きでプログラムを記述していたため、CSV出力時もそれにならってBOM付きで
ご丁寧にも出力してくれていました。


そもそもソースにBOMがついた理由

基本的に普段BOMをつけたりはしていない(特に意識していない)ので、何故ついたのか不思議だったのですが
Windowsのデフォルトのメモ帳(NotePad)が自動でBOM付き保存する仕様でした。


今回のソースを設置するために使用するPCが指定されていて、テキストエディタがデフォルトのものしかなかったので
そのPC上で環境に合わせて少しソースをいじった際にBOMがついてしまったようです。



いつもマイクロソフトにはしてやられるなぁ〜