Господа! Всем противникам BOM советую
внимательно прочитать
https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8
В частности, заострю ваше внимание на следующих двух пунктах:
* "Not using a BOM allows text to be backwards-compatible with some software that is not Unicode-aware".
В общем случае эта фраза справедлива
исключительно для символов с кодами в диапазоне от 0 до 127 (т.е. ASCII). Наличие же символов вне этого диапазона приводит к проблеме определения кодировки этих символов. (Поясняю примером: однобайтные символы с кодами от 128 до 255 выглядят абсолютно по разному в зависимости от региональной настройки: то, что для нас кириллица, для европейцев будет выглядеть какими-то умляутами, для греков - греческими буквами, и т.д.)
* "On the other hand, without a BOM, heuristic analysis is required to determine what character encoding a file is using".
Перечитайте ещё раз: "heuristic analysis is required". Вот поэтому лучше иметь BOM - для однозначности и для скорости. Замечание "In general, UTF-8 is easily detected"
на практике означает вот что: если у вас есть текстовый файл размером, скажем, 1 МБ, в котором первые, скажем, 512 кБ содержат исключительно ASCII-символы, и только потом появляются многобайтные символы UTF-8, то большинство редакторов определят этот файл как ANSI, поскольку из соображений быстродействия heuristic analysis обычно ограничивается несколькими килобайтами в начале файла. В то время как наличие UTF-8 BOM мгновенно (!) подсказало бы, что это файл с символами в кодировке UTF-8.