Marcatorul secvenței de octeți sau marcatorul de ordine a octeților ( English Byte Order Mark, BOM ) este un caracter special din standardul Unicode inserat la începutul unui fișier text sau al unui flux pentru a indica faptul că Unicode este utilizat în fișier (flux), precum și pentru a indică indirect codificarea și ordinea octeților prin care au fost codificate caracterele Unicode. Numărul Unicode pentru acest caracter este U+FEFF. Utilizarea acestui caracter, conform specificației Unicode, este opțională, dar este utilizat pe scară largă, deoarece facilitează evitarea decodării incorecte a informațiilor textuale.
Conform specificației Unicode, un marcator poate apărea doar la începutul unui fișier sau flux. Dacă un caracter U+FEFFapare în mijlocul unui flux de date, trebuie să fie interpretat ca un „spațiu fără lățime zero” (în esență, un caracter care nu poate fi afișat și care nu se schimbă). Cu toate acestea, majoritatea[ cât? ], altele decât versiunile Opera 12 și mai mici, tratează BOM-ul din mijlocul documentului ca pe un caracter care ocupă o linie întreagă și apoi generează o întrerupere de linie [1] .
Pentru un spațiu de lățime zero fără rupere în Unicode, există, de asemenea, un caracter special separat - U+2060, care este recomandat să fie utilizat ca atare, iar marcatorul de secvență de octeți este U+FEFFrecomandat să fie utilizat numai în scopul propus.
Dacă formatul de reprezentare a caracterelor Unicode este cunoscut exact în prealabil de către programul de recepție, atunci conform standardului Unicode, marcatorul nu trebuie setat. Și dacă formatul este declarat în alt mod (de exemplu, MIME în câmpul antet Content-Type), marcatorul nu trebuie să fie setat conform standardului.
Prin modul în care este codificat marcatorul secvenței de octeți de la începutul unui fișier sau flux, se poate determina cu ușurință codarea și ordinea octeților utilizate pentru a codifica caracterele Unicode în acel fișier sau flux. Această împrejurare a fost principalul motiv pentru utilizarea pe scară largă a marcatorului de secvență de octeți.
Codificare | Reprezentarea marcatorului secvenței de octeți | Reprezentarea markerului în caz de decodificare eronată cu o codificare diferită | |||||
---|---|---|---|---|---|---|---|
Cod hexadecimal | Cod zecimal | ISO-8859-1 | KOI8-R | CP1251 | CP866 | cometariu | |
UTF-8 [t1] | EF BB BF | 239 187 191 |  | О╩© | п»ї | я╗┐ | |
UTF-16 ( BE ) | FE FF | 254 255 | þÿ | ЧЪ | юя | ■ | decalaj - nerupere |
UTF-16 ( LE ) | FF FE | 255 254 | ÿþ | ЪЧ | яю | ■ | |
UTF-32 (BE) | 00 00 FE FF | 0 0 254 255 | ␀␀þÿ | ␀␀ЧЪ | ␀␀юя | ␀␀■ | ␀ - NUL , spatiu - nerupere |
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 | ␎þÿ | ␎■ | ␎ - ex. Simbol Shift Out, spațiul nu se rupe | ||
BOCU-1 [t1] | FB EE 28 | 251 238 40 | ûî | √ю( | |||
GB-18030 [t1] | 84 31 95 33 | 132 49 149 51 | �1�3 | Д1Х3 | � — coduri fără valori |
Există cazuri în care utilizarea unui marcator de secvență de octeți ar trebui evitată în ciuda confortului său. De exemplu, utilizarea unui marcator în șabloanele web face ca în document să apară linii goale, așa că este o idee bună să eliminați marcatorul din scripturile web și fișierele CSS . Iar prezența unui marker la începutul fișierelor PHP (înaintea etichetei <?php) face ca un șir gol să fie trimis către client înainte ca codul să înceapă chiar să se execute, ceea ce provoacă un eșec în cazurile în care un antet HTTP ar trebui trimis imediat către clientul (la redirecționarea unei cereri, de exemplu). [5] De asemenea, poate procesa incorect json_decode dacă json este scris într-un fișier cu BOM.