08-08-2023
Маркер последовательности байтов или метка порядка байтов (англ. Byte Order Mark (BOM)) — Юникод-символ, используемый для индикации порядка байтов текстового файла. Его кодовый символ U+FEFF
. По спецификации его использование не является обязательным, однако если маркер последовательности байтов используется, то он должен быть установлен в начале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать какой кодировкой Unicode закодирован текст.
Кодировка Unicode может использовать 16-разрядные или 32-разрядные числа и приложение должно знать, как дальше с ними поступать. Поэтому потребность в маркере последовательности байтов возникает при обмене документами.
Согласно спецификации Unicode, символ U+FEFF
в середине потока данных должен интерпретироваться как «нулевой ширины неразрывный пробел» (по существу, нулевой символ). Однако Unicode 3.2 настоятельно рекомендует использовать в этом качестве символ U+2060
«Word Joiner»[1], а U+FEFF
использовать только как маркер последовательности байтов.
Кодировка | Представление (hex) | Представление (dec) | Представление (ISO-8859-1) |
---|---|---|---|
UTF-8[t 1] | EF BB BF |
239 187 191 |
 |
UTF-16 (BE) | FE FF |
254 255 |
þÿ |
UTF-16 (LE) | FF FE |
255 254 |
ÿþ |
UTF-32 (BE) | 00 00 FE FF |
0 0 254 255 |
□□þÿ (□ is the ascii null character) |
UTF-32 (LE) | FF FE 00 00 |
255 254 0 0 |
ÿþ□□ (□ is the ascii null character) |
UTF-7[t 1] | 2B 2F 76 38 [t 2] |
43 47 118 56 |
+/v8 |
UTF-1[t 1] | F7 64 4C |
247 100 76 |
÷dL |
UTF-EBCDIC[t 1] | DD 73 66 73 |
221 115 102 115 |
Ýsfs |
SCSU[t 1] | 0E FE FF [t 3] |
14 254 255 |
□þÿ (□ is the ascii "shift out" character) |
BOCU-1[t 1] | FB EE 28 |
251 238 40 |
ûî |
GB-18030[t 1] | 84 31 95 33 |
132 49 149 51 |
□1■3 (□ and ■ are unmapped ISO-8859-1 characters) |
001111xx
в двоичном представлении, где xx
зависит от следующего символа (первого после BOM). Поэтому четвёртый байт не является только частью BOM, но также содержит информацию о следующем (не BOM) символе. Для xx=00
, 01
, 10
, 11
, четвёртый байт будет, соответственно, 38
, 39
, 2B
, или 2F
при кодировке в base64. Если же следующий символ не кодируется base64, то используется 38
в качестве четвёртого байта, а следующий байт 2D
.Маркер последовательности байтов.