Bytesekvensmarkör eller byteordningsmärke ( engelska Byte Order Mark, BOM ) är ett specialtecken från Unicode -standarden som infogas i början av en textfil eller ström för att indikera att Unicode används i filen (strömmen), samt för att ange indirekt kodningen och byteordningen med vilken Unicode-tecken kodades. Unicode-numret för detta tecken är U+FEFF. Användningen av detta tecken, enligt Unicode-specifikationen, är valfritt, men det används flitigt, eftersom det gör det enkelt att undvika felaktig avkodning av textinformation.
Enligt Unicode-specifikationen kan en markör bara visas i början av en fil eller stream. Om ett tecken U+FEFFförekommer mitt i en dataström måste det tolkas som ett "noll-width non-breaking space" (i huvudsak ett tecken som inte kan visas och ingenting förändras). Men de flesta[ hur mycket? ] andra webbläsare än Opera version 12 och lägre behandlar BOM i mitten av dokumentet som ett tecken som upptar en hel rad och genererar sedan en radbrytning [1] .
För ett icke-brytande nollbreddsutrymme i Unicode finns det också ett separat specialtecken - U+2060, som rekommenderas att användas som sådant, och bytesekvensmarkören U+FEFFrekommenderas att endast användas för sitt avsedda syfte.
Om Unicode-teckenrepresentationsformatet är känt exakt i förväg av det mottagande programmet, bör markören enligt Unicode-standarden inte ställas in. Och om formatet deklareras på annat sätt (till exempel MIME i rubrikfältet Content-Type), är det inte meningen att markören ska ställas in enligt standarden.
Genom att bytesekvensmarkören i början av en fil eller ström är kodad, kan man enkelt bestämma kodningen och byteordningen som används för att koda Unicode-tecken i den filen eller strömmen. Denna omständighet var huvudorsaken till den utbredda användningen av bytesekvensmarkören.
Kodning | Byte Sequence Marker Representation | Representation av markören vid felaktig avkodning med en annan kodning | |||||
---|---|---|---|---|---|---|---|
Hexkod | Decimalkod | ISO-8859-1 | KOI8-R | CP1251 | CP866 | kommentar | |
UTF-8 [t1] | EF BB BF | 239 187 191 |  | О╩© | п»ї | я╗┐ | |
UTF-16 ( BE ) | FE FF | 254 255 | þÿ | ЧЪ | юя | ■ | gap - icke- brytande |
UTF-16 ( LE ) | FF FE | 255 254 | ÿþ | ЪЧ | яю | ■ | |
UTF-32 (BE) | 00 00 FE FF | 0 0 254 255 | ␀␀þÿ | ␀␀ЧЪ | ␀␀юя | ␀␀■ | ␀ - NUL , space - non- breaking |
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. Skift ut symbol, rymden är obruten | ||
BOCU-1 [t1] | FB EE 28 | 251 238 40 | ûî | √ю( | |||
GB-18030 [t1] | 84 31 95 33 | 132 49 149 51 | �1�3 | Д1Х3 | � — koder utan värden |
Det finns fall där användningen av en bytesekvensmarkör bör undvikas trots dess bekvämlighet. Användning av en markör i webbmallar gör till exempel att tomma rader visas i dokumentet, så det är en bra idé att ta bort markören från webbskript och CSS - filer. Och närvaron av en markör i början av PHP - filer (före taggen <?php) gör att en tom sträng skickas till klienten innan koden ens har börjat exekvera, vilket orsakar ett fel i de fall en HTTP-rubrik ska skickas omedelbart till klienten (till exempel vid omdirigering av en begäran). [5] Det kan också bearbeta json_decode felaktigt om json skrivs till en fil med BOM.