Značka sekvence bajtů nebo značka pořadí bajtů ( anglicky Byte Order Mark, BOM ) je speciální znak ze standardu Unicode vložený na začátek textového souboru nebo streamu, který označuje, že je v souboru (streamu) použit kód Unicode, a také nepřímo indikují kódování a pořadí bajtů, kterými byly znaky Unicode kódovány. Číslo Unicode pro tento znak je U+FEFF. Použití tohoto znaku je podle specifikace Unicode volitelné, ale je široce používáno, protože umožňuje vyhnout se nesprávnému dekódování textových informací.
Podle specifikace Unicode se značka může objevit pouze na samém začátku souboru nebo streamu. Pokud U+FEFFse uprostřed datového toku objeví znak, musí interpretovat jako "nepřerušitelný prostor s nulovou šířkou" (v podstatě nezobrazitelný a nic neměnný znak). Nicméně většina[ kolik? ] prohlížeče jiné než Opera verze 12 a nižší považují kusovník uprostřed dokumentu za znak zabírající celý řádek a poté vygenerují zalomení řádku [1] .
Pro nezalomitelnou mezeru s nulovou šířkou v Unicode existuje také samostatný speciální znak - U+2060, který se doporučuje používat jako takový, a značka sekvence bajtů se U+FEFFdoporučuje používat pouze pro zamýšlený účel.
Pokud přijímající program přesně předem zná formát reprezentace znaků Unicode, pak by podle standardu Unicode neměla být značka nastavena. A pokud je formát deklarován jiným způsobem (například MIME v poli hlavičky Content-Type), nemá být značka nastavena podle standardu.
Způsobem, jakým je zakódována značka sekvence bajtů na začátku souboru nebo proudu, lze snadno určit kódování a pořadí bajtů používané ke kódování znaků Unicode v celém souboru nebo proudu. Tato okolnost byla hlavním důvodem pro široké použití markeru byte sekvence.
Kódování | Reprezentace značky bajtové sekvence | Reprezentace markeru v případě chybného dekódování s jiným kódováním | |||||
---|---|---|---|---|---|---|---|
Hexadecimální kód | Desetinný kód | ISO-8859-1 | KOI8-R | CP1251 | CP866 | komentář | |
UTF-8 [t1] | EF BB BF | 239 187 191 |  | О╩© | п»ї | я╗┐ | |
UTF-16 ( BE ) | FE FF | 254 255 | þÿ | ЧЪ | юя | ■ | mezera - nerozbitná |
UTF-16 ( LE ) | FF FE | 255 254 | ÿþ | ЪЧ | яю | ■ | |
UTF-32 (BE) | 00 00 FE FF | 0 0 254 255 | ␀␀þÿ | ␀␀ЧЪ | ␀␀юя | ␀␀■ | ␀ - NUL , mezera - nerozbitná |
UTF-32 (LE) | FF FE 00 00 | 255 254 0 0 | ÿþ␀␀ | ЪЧ␀␀ | яю␀␀ | ■␀␀ | |
UTF-7 [t1] | 2B 2F 76 38 2B 2F 76 39 2B 2F 76 2B 2B 2F 76 2F[t2] |
43 47 118 56 43 47 118 57 43 47 118 43 43 47 118 47 |
+/v8 +/v9 +/v+ +/v/ | ||||
UTF-1 [t1] | F7 64 4C | 247 100 76 | ÷dL | ||||
UTF-EBCDIC [t 1] | DD 73 66 73 | 221 115 102 115 | Ýsfs | ||||
SCSU [t1] | 0E FE FF[t3] | 14 254 255 | ␎þÿ | ␎■ | ␎ - např. Symbol vyřazení, prostor je nepřetržitý | ||
BOCU-1 [t1] | FB EE 28 | 251 238 40 | ûî | √ю( | |||
GB-18030 [t1] | 84 31 95 33 | 132 49 149 51 | �1�3 | Д1Х3 | � — kódy bez hodnot |
Existují případy, kdy je třeba se vyhnout použití značky bajtové sekvence i přes její pohodlí. Například použití značky ve webových šablonách způsobí, že se v dokumentu objeví prázdné řádky, takže je dobré značku z webových skriptů a souborů CSS odstranit. A přítomnost značky na začátku souborů PHP (před tagem <?php) způsobí, že se klientovi odešle prázdný řetězec dříve, než se kód vůbec začne vykonávat, což způsobí selhání v případech, kdy by měla být HTTP hlavička odeslána okamžitě klienta (např. při přesměrování požadavku). [5] Může také nesprávně zpracovat json_decode , pokud je json zapsán do souboru s kusovníkem.