BOM付きUTF-8ファイルはテキストファイルではない

では何か? 構造のあるデータ、すなわちバイナリである。C言語*風*に書けばこんな感じ。

struct {
  char signature[3];
  char body[n];
};
  • バイナリなので、shebang(“#!”)が動作しないのは当然である。
  • バイナリなので、catでつなぐとゴミが混じるのは当然である。
  • バイナリなので、grepで行頭からの前方一致に1行目が引っ掛からなくてもそれはgrepのせいではない。
  • バイナリなので、splitしたら1つ目のファイル以外にBOMが付かなくてもそれはsplitのせいではない。

BOMを付けるか付けないかの違いは好みの問題ではない。テキストデータを、テキストファイルとして保持するか、バイナリファイルとして保持するかの違いなのだ。