Описание тега byte-order-mark
Метка порядка байтов (BOM) - это символ Unicode, используемый для обозначения порядка байтов (порядка байтов) текстового файла или потока. Использование спецификации не является обязательным и, если оно используется, должно появиться в начале текстового потока. Помимо конкретного использования в качестве индикатора порядка байтов, символ спецификации может также указывать, в каком из нескольких представлений Unicode закодирован текст.
Например, использование спецификации UTF-16 (U+FEFF
) дает понять из первых двух байтов текста, является ли поток "big endian" (BE) - как западные числа, поэтому поток будет начинаться FE FF ...
- или "с прямым порядком байтов" (LE) - как числа на арабском языке, чтобы поток начинался FF FE ...
. Если его неправильно интерпретировать как ISO-8859-1, он будет отображаться какþÿ
(BE) или ÿþ
(LE).
В UTF-8 спецификация не требуется и не рекомендуется, но должна состоять из трех байтов.0xEF 0xBB 0xBF
. При неправильной интерпретации как ISO-8859-1 это выглядит как
. Если увидеть этот триплет в необычных местах при выводе кода, это почти всегда указывает на то, что спецификация не игнорируется, когда она должна быть, или была добавлена там, где этого не ожидали.
В UTF-32 используется та же спецификация, что и для UTF-16, но поскольку для каждого символа используются 32 бита (так U+0000FEFF
), то его неправильная интерпретация ASCII-8859-1 будет содержать нулевые символы: □□þÿ
(BE) или ÿþ□□
(LE), где □
представляет ASCII NUL
характер.
Дополнительная информация
- Знак порядка байтов в английской Википедии.
- Метки порядка байтов UTF-8, UTF-16 и UTF-32 из FAQ по Unicode
- Метка порядка байтов (BOM): U+FEFF (PDF) из v5 стандарта Unicode (§16.8)