Byte order mark
BOM (Byte Order Mark, v slovenčine „označenie poradia bajtov“) je hexadecimálne zapísaný znak ako FEFF (v desiatkovej sústave 65279).
V kódovaní UTF-8 je tento znak reprezentovaný trojicou bajtov 0xEF 0xBB 0xBF („UTF-8 signatúra“), v kódovaní UTF-16 big-endian dvojicou bajtov 0xFE 0xFF ako aj v kódovaní UTF-16 little-endian 0xFF 0xFE . Grafický význam znaku je „nedeliteľná medzera nulovej šírky“ (zero-width no-break space ), čím je podobný znaku U+2060 (word joiner ). [1]
Hlavným dôvodom použitia tohto znaku je rozlíšenie poradia ukladania bajtov big-endian alebo little-endian v UTF-16 a jeho odlíšenie sa od UTF-8. V prípade zámeny poradia bajtov nie je znak U+FFFE platným Unicode znakom, pričom v kódovaní UTF-8 sa bajty 0xFE a 0xFF nesmú vyskytovať. Pre účely rozpoznania poradia ukladania bajtov je použitie BOM v UTF-8 zbytočné a slúži len napríklad aplikáciám operačného systému Microsoft Windows ktoré tento znak používajú na začiatku súboru aby rozlíšili súbory uložené vo formáte UTF-8. V niektorých systémoch (napr. POSIX ) sa táto signatúra nepoužíva.
Používanie alebo nepoužívanie BOM môže byť zdrojom problémov. Napríklad Internet Explorer verzie 6 zobrazoval pri súboroch HTML s BOM netlačiteľné znaky na začiatku, teda ešte pred obsahom HTML.
BOM
(hexa) |
Veľkosť
priestoru Unicode |
Kódovanie | Veľkosť
(B, 1B=8b) |
Počet | Maximálna
dĺžka znaku (B, B=8b) |
---|---|---|---|---|---|
EF BB BF | 21b, väčšie ako BMP | UTF-8 | 1B | 1 až 4 | 4B |
FE FF | 21b, väčšie ako BMP | UTF-16, variant UTF-16BE, (big-endian) | 2B | 1 až 2 | 4B |
FF FE | 21b, väčšie ako BMP | UTF-16, variant UTF-16LE, (little-endian) | 2B | 1 až 2 | 4B |
00 00 FE FF | 32b, väčšie ako BMP | UTF-32, variant UTF-32BE, (big-endian) | 2B | 2 | 4B |
FF FE 00 00 | 32b, väčšie ako BMP | UTF-32, variant UFT-32LE, (little-endian) | 2B | 2 | 4B |
EF BB BF | 31b, väčšie ako BMP | UFT-8, rozšírenie | 1B | 1 až 6 | 6B |
FF FE | 16b, rovné BMP | UCS-2, variant UCS-2BE, (big-endian) | 2B | 1 | 4B |
FF FE | 16b, rovné BMP | UCS-2, variant UCS-2LE, (little-endian) | 2B | 1 | 4B |
- | 8b, menšie ako BMP | ASCII + code page | 1B | 1 | 4B |
- | 7b, menšie ako BMP | ASCII | 1B | 1 | 4B |