Помогите, пожалуйста, разобраться:
UTF-8 и UTF-8 без BOM - в чём разница в использовании? Что лучше использовать для сохранения файлов?
Когда-то у меня сложилось впечатление, что UTF-8 универсальнее, лучше использовать эту кодировку - тогда я имел дело с HTML, CSS +/- JavaScript, но позднее - имея дело с PHP - получил опыт, говорящий, что UTF-8 без BOM предпочтительнее (были проблемы, как раз, из-за UTF-8)
Так, как всё-таки быть? Что использовать?
Мой опыт пока такой: для клиентской части - UTF-8 (либо нет разницы), для серверной - UTF-8 без BOM - всё так? Почему?
Маркер последовательности байтов или метка порядка байтов (англ. Byte Order Mark (BOM)) — Юникод-символ, используемый для индикации порядка байтов текстового файла. Его кодовый символ U+FEFF. По спецификации, его использование не является обязательным, однако, если маркер последовательности байтов используется, то он должен быть установлен в начале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать, какой кодировкой Unicode закодирован текст.
Кодировка Unicode может использовать 16-разрядные или 32-разрядные числа и приложение должно знать, как дальше с ними поступать. Поэтому потребность в маркере последовательности байтов возникает при обмене документами.
День воевал пока не узнал что это такой принципиальный момент для браузеров. Так при сохранении локальной копии html страницы с кирилицей wget'ом или curl'ом имеем, видимо, копию UTF без BOM. Браузеры такую страницу с кирилицей отображают кракозябрами. В Notepad++ перекодирую в формат "UTF BOM" и проблема решается
Добавлю. что разница для "не php" файлов есть. Например, .js файлы, как правило, браузеры отдают без указания charset в заголовках. Если BOM метка есть в файле, то он читается как UTF, в противном случае каждый браузер читает как хочет. У меня лиса открыла JS без BOM как latin1, а хром - cp1251
Bom - спецификация для NET языков.
В Powershell у меня крякозябры для русского языка, после пересохранения безбомовского файла в любой из форматов, будь-то, бом-безбом или, что либо-другое.
Были, как то ранее проблемы с web js то же.