Utf 8 без bom что это
Перейти к содержимому

Utf 8 без bom что это

  • автор:

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 — всё так? Почему?

  • Вопрос задан более трёх лет назад
  • 61837 просмотров

Комментировать
Решения вопроса 2

delphinpro

Сергей delphinpro @delphinpro
frontend developer

Различий никаких нет, кроме наличия/отсутствия маркера. Кодировка одна и та же — utf-8. По стандарту unicode маркер должен быть.

Удалять маркер BOM при сохранении нужно только для PHP, который почему-то не умеет корректно обрабатывать нормальные unicode файлы.

Ответ написан более трёх лет назад
Нравится 6 1 комментарий
(«Нет смысла использовать строку без информации о её кодировке») —

littleguga

littleguga @littleguga
Не стыдно не знать, а стыдно не интересоваться.

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

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

Если сохраняете php файл — то без BOM, в остальном же разницы никакой не имеет.

Utf 8 без bom что это

Если не ошибаюсь, UTF-8 без BOM это кодировка, в которой каждому символу соответствует 1 байт. А просто UTF-8 тоже самое только в начале файла идут символы ef bb bf (в HEX)
Я всё правильно понял? Какой из них лучше использовать когда сохраняешь файлы?

И ещё. Что значит строчка в статус-баре Notepad++»ANSI AS UTF-8″? Это когда выбираешь кодировку «UTF-8 без BOM»

автор: elenaki (11.02.2010 в 19:59) письмо автору

без BOM.
если сохраните с ним, то на файлах, где есть сессии или заголовки, будет ошибка.

автор: heed (11.02.2010 в 20:58) письмо автору

Если написать в utf-8 файл в 3 символа, русский пробел и английский
‘З Z’
покажет без BOM
d0 97 20 5a
а с ним
ef bb bf d0 97 20 5a
т.е. два байта там только первая буква, bom это три байта

причём если набрать в строке «Выполнить» charmap
, выбрать юникод-шрифт, например «Arial»
, то символ З там записан как U+0417 Cirrilic Capital Letter Ze
а Z как U+005a Latin Capital Letter Z

т.е. чтобы файл не весил в два раза больше, из юникода сделали utf-8,
но я что-то не понял зачем сделали d097 из 0417, просто лень лезть искать чего почитать, из-за какой-то мелочи ,)

автор: Саня (11.02.2010 в 23:40) письмо автору

BOM актуален только для UTF-16 и UTF-32. В UTF-8 вообще нет такого понятия как BOM.

автор: sasha1133 (12.02.2010 в 01:30) письмо автору

В notepad++ есть UTF-8 с BOM и без.

автор: Саня (12.02.2010 в 07:17) письмо автору
автор: sasha1133 (12.02.2010 в 12:32) письмо автору

То что судя по всему в UTF-8 есть такое понятие как BOM. Вот попробовал сохранить русский текст с помощью notepad++ в кодировке UTF-8 без BOM — размер файла в байтах равен количеству символов (1 байт — 1 символ). Потом тот же текст просто в UTF-8 — получился файл на 3 байта больше, т.е. в начало файла добавился этот BOM, разве нет?

автор: Trianon (12.02.2010 в 12:58) письмо автору

Понятием BOM является символ Byte Order Mark из набора UNICODE (а значит он есть в любых Unicode Transformation Formats — не важно 8-ми , 16-и или 32-разрядных.)
Другое дело, что всё же — применительно к www — кодировку UTF-8 стараются использовать по умолчанию, без этого символа (поскольку он мешает php-обработке). На этом, видимо, Саня и хотел сделать акцент.
Сам по себе этот символ никакой значимой информации (помимо того, что по его байтовому представлению можно опознать конкретную форму UNICODE) не несет.

автор: Саня (12.02.2010 в 13:13) письмо автору

Нужно смотреть не на то, что написано в редакторе, а на то, что написано в стандарте.
BOM = Byte Order Mark = метка порядка следования байтов. Стандарт не определяет порядок следования байтов в UTF-8.
Поэтому три символа в начале файла с кодами EF BB BF нельзя считать BOM. На самом деле эта сигнатура обозначает, что дальше идёт текст в формате UTF-8.

> размер файла в байтах равен количеству символов (1 байт — 1 символ)
Это верно только для символов с кодом менее 128.

автор: Trianon (12.02.2010 в 13:22) письмо автору

В UTF-8 порядок следования байтов определен, (равно как и порядок следования бит в кодовых позициях байтов) и определен весьма жестко.
В начале файла нет трех символов с кодами EF BB BF
В начале файла есть три байта EF BB BF, представляющие один символ — Byte Order Mark (0. 0FEFFu).

автор: sasha1133 (13.02.2010 в 02:49) письмо автору

>Это верно только для символов с кодом менее 128.

Ну пожалуй соглашусь, только что замутил файл который состоял из 94 символов и весил 188 байт без БОМ и 191 с БОМ.

Сохраняйте в кодировке UTF-8 без BOM как это? Сохраняйте в кодировке UTF-8 без BOM как это?

Это значит, что при сохранении в начале файла не будет добавляться сигнатура bom (которая используется для опознования кодировки файла в программах) . Notepad++ к примеру так умеет.

BOM это спец символы которые могут присутствовать в кодировке utf8 но также могут и отсутствовать

Порядок байтов (BOM, сигнатура)

Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа, сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). По наличию сигнатуры программы могут автоматически определить, является ли файл закодированным в UTF-8, однако файлы с такой сигнатурой могут некорректно обрабатываться старыми программами, в частности xml-анализаторами. Такие редакторы, как Notepad++, Notepad2 и Kate позволяют явно указывать, следует ли добавлять сигнатуру при сохранении UTF-файлов.

Что такое BOM-символы и как их убрать

В этой статье мы расскажем, что такое BOM-символы и как их удалить из файла.

Что такое BOM

Создавать и изменять файлы сайта можно не только в панели управления, но и на компьютере, через стандартные программы (например, Notepad++ в Windows). При сохранении редактор может присвоить файлу кодировку UTF-8 с BOM-меткой.

BOM (Byte Order Mark) — это спецсимвол из стандарта Unicode, который добавляется в начале файла. Какие проблемы могут возникнуть, если есть BOM:

  • в файле с расширением .PHP может возникнуть ошибка “Warning: Cannot modify header information — headers already sent by (output started at …”;
  • в файле с расширением .HTML могут отображаться нечитаемые символы вместо текста, а также может искажаться разметка страницы.

Как убрать BOM-символы

Чтобы убрать спецсимволы, достаточно выбрать кодировку UTF-8 без BOM при сохранении файла. Это можно сделать двумя способами:

Через Notepad++

1. Откройте файл с помощью Notepad++.

2. В разделе «Кодировки» выберите Преобразовать в UTF-8:

Готово, вы убрали BOM-символы.

1. Подключитесь к серверу по SSH.

2. Проверьте файлы на наличие BOM-символов. Для этого выполните команду:

find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done

3. Если BOM-символы найдены, удалите их:

find . -type f -exec sed 's/^\xEF\xBB\xBF//' -i.bak <> \; -exec rm <>.bak \;

Готово, вы убрали BOM-символы.

Популярные статьи

  • Как указать (изменить) DNS-серверы для домена
  • Я зарегистрировал домен, что дальше
  • Как добавить запись типа A, AAAA, CNAME, MX, TXT, SRV для своего домена
  • Что такое редирект: виды и возможности настройки
  • Как создать почту со своим доменом

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *