stranger2015
@stranger2015
Писатель. Сайтостроитель-любитель

UTF-8 vs UTF-8 без BOM — что когда использовать?

Помогите, пожалуйста, разобраться:
UTF-8 и UTF-8 без BOM - в чём разница в использовании? Что лучше использовать для сохранения файлов?

Когда-то у меня сложилось впечатление, что UTF-8 универсальнее, лучше использовать эту кодировку - тогда я имел дело с HTML, CSS +/- JavaScript, но позднее - имея дело с PHP - получил опыт, говорящий, что UTF-8 без BOM предпочтительнее (были проблемы, как раз, из-за UTF-8)

Так, как всё-таки быть? Что использовать?

Мой опыт пока такой: для клиентской части - UTF-8 (либо нет разницы), для серверной - UTF-8 без BOM - всё так? Почему?
  • Вопрос задан
  • 42163 просмотра
Решения вопроса 2
delphinpro
@delphinpro
frontend developer
Различий никаких нет, кроме наличия/отсутствия маркера. Кодировка одна и та же - utf-8. По стандарту unicode маркер должен быть.

Удалять маркер BOM при сохранении нужно только для PHP, который почему-то не умеет корректно обрабатывать нормальные unicode файлы.
Ответ написан
littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.
Маркер последовательности байтов или метка порядка байтов (англ. Byte Order Mark (BOM)) — Юникод-символ, используемый для индикации порядка байтов текстового файла. Его кодовый символ U+FEFF. По спецификации, его использование не является обязательным, однако, если маркер последовательности байтов используется, то он должен быть установлен в начале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать, какой кодировкой Unicode закодирован текст.

Кодировка Unicode может использовать 16-разрядные или 32-разрядные числа и приложение должно знать, как дальше с ними поступать. Поэтому потребность в маркере последовательности байтов возникает при обмене документами.


via ВикиПедия

Если сохраняете php файл - то без BOM, в остальном же разницы никакой не имеет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@SergeyKhvoschevskiy
День воевал пока не узнал что это такой принципиальный момент для браузеров. Так при сохранении локальной копии html страницы с кирилицей wget'ом или curl'ом имеем, видимо, копию UTF без BOM. Браузеры такую страницу с кирилицей отображают кракозябрами. В Notepad++ перекодирую в формат "UTF BOM" и проблема решается
Ответ написан
@AndryG
Добавлю. что разница для "не php" файлов есть. Например, .js файлы, как правило, браузеры отдают без указания charset в заголовках. Если BOM метка есть в файле, то он читается как UTF, в противном случае каждый браузер читает как хочет. У меня лиса открыла JS без BOM как latin1, а хром - cp1251
Ответ написан
@Igor_Ya
Bom - спецификация для NET языков.
В Powershell у меня крякозябры для русского языка, после пересохранения безбомовского файла в любой из форматов, будь-то, бом-безбом или, что либо-другое.
Были, как то ранее проблемы с web js то же.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы