Bytesekvensmarkör

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 16 april 2021; kontroller kräver 4 redigeringar .

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.

Användning

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.

Bestämning av kodning med bytesekvensmarkör

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
  1. 1 2 3 4 5 6 7 I dessa kodningar bestämmer sekvensen inte exakt byteordningen eftersom kodningen är en byte, men denna sekvens kan användas för att bestämma kodningsmetoden. [2] [3]
  2. I UTF-7, på grund av användningen av bas-64, är den fjärde byten av BOM 001111xxi binär representation, där den xxberor på nästa tecken (det första efter BOM). Därför är den fjärde byten inte bara en del av BOM, utan innehåller också information om nästa (icke-BOM) tecken. För xx=00, 01, 10, 11, kommer den fjärde byten att vara respektive , 38, 39, 2Beller 2Fnär den är kodad i base64. Om nästa tecken inte är base64-kodat används det 38som fjärde byte och nästa byte är 2D.
  3. SCSU tillhandahåller andra kodningar för U+FEFF, den specificerade sekvensen rekommenderas i UTR #6. [fyra]

Svårigheter att tänka på när du använder

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.

Anteckningar

  1. Byte -order-märket (BOM) i HTML  . www.w3.org. Hämtad 19 september 2018. Arkiverad från originalet 17 augusti 2018.
  2. FAQ - UTF-8, UTF-16, UTF-32 & BOM: Kan en UTF-8-dataström innehålla BOM-tecknet (i UTF-8-form)? Om ja, kan jag då fortfarande anta att de återstående UTF-8-bytena är i big-endian-ordning? . Hämtad 4 januari 2009. Arkiverad från originalet 1 september 2012.
  3. STD 63: UTF-8, en transformation av ISO 10646 Arkiverad 25 oktober 2011 på Wayback Machine Byte Order Mark (BOM)
  4. UTR #6: Signaturbytesekvens för SCSU . Hämtad 18 oktober 2011. Arkiverad från originalet 6 oktober 2011.
  5. Potentiella problem med UTF-8 BOM . Hämtad 3 maj 2017. Arkiverad från originalet 13 juni 2017.