BOM付きUTF-8ファイルはテキストファイルではない
では何か? 構造のあるデータ、すなわちバイナリである。C言語*風*に書けばこんな感じ。
struct { char signature[3]; char body[n]; };
- バイナリなので、shebang(“#!”)が動作しないのは当然である。
- バイナリなので、catでつなぐとゴミが混じるのは当然である。
- バイナリなので、grepで行頭からの前方一致に1行目が引っ掛からなくてもそれはgrepのせいではない。
- バイナリなので、splitしたら1つ目のファイル以外にBOMが付かなくてもそれはsplitのせいではない。
BOMを付けるか付けないかの違いは好みの問題ではない。テキストデータを、テキストファイルとして保持するか、バイナリファイルとして保持するかの違いなのだ。