Byte szekvencia marker

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. április 16-án felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

A bájtsorrend- jelző vagy bájtsorrend- jel ( angol  Byte Order Mark, BOM ) egy speciális karakter a Unicode -szabványból , amelyet szöveges fájl vagy adatfolyam elejére szúrnak be, jelezve, hogy a fájlban (folyamban) Unicode-ot használnak, valamint közvetve jelzi a kódolást és a bájtsorrendet , amellyel a Unicode karaktereket kódolták. A karakter Unicode-száma U+FEFF. Ennek a karakternek a használata a Unicode specifikáció szerint opcionális, de széles körben használatos, mivel könnyen elkerülhető a szöveges információk helytelen dekódolása.

Használat

A Unicode specifikáció szerint egy jelölő csak a fájl vagy adatfolyam legelején jelenhet meg. Ha egy karakter U+FEFFaz adatfolyam közepén fordul elő, akkor muszáj "nulla szélességű, nem törő szóközként" (lényegében nem megjeleníthető és semmit sem változtató karakterként) értelmezhető. A legtöbb azonban[ mennyit? ] az Opera 12-es és régebbi verzióitól eltérő böngészők a dokumentum közepén lévő BOM-ot egy teljes sort elfoglaló karakterként kezelik, majd sortörést generálnak [1] .

A Unicode-ban a megszakítást nem igénylő nulla szélességű szóközhöz külön speciális karakter is tartozik - U+2060, amelynek használata javasolt, a bájt szekvencia jelölőt pedig U+FEFFcsak a rendeltetésének megfelelően.

Ha a Unicode karakterábrázolási formátumot a fogadó program pontosan előre ismeri, akkor a Unicode szabvány szerint a markert nem szabad beállítani. És ha a formátum más módon van deklarálva (például MIME a fejléc mezőben Content-Type), akkor a jelölőt nem kell a szabvány szerint beállítani.

A kódolás meghatározása byte szekvencia markerrel

A fájl vagy adatfolyam elején található bájtsorozat-jelölő kódolásával könnyen meghatározható a Unicode karakterek kódolásához használt kódolás és bájtsorrend az adott fájlban vagy adatfolyamban. Ez a körülmény volt a fő oka a bájtszekvencia marker széles körű elterjedésének.

Kódolás Byte Sequence Marker ábrázolása A marker ábrázolása hibás dekódolás esetén eltérő kódolással
Hex kód Tizedes kód ISO-8859-1 KOI8-R CP1251 CP866 megjegyzés
UTF-8 [t1] EF BB BF 239 187 191  О╩© п»ї я╗┐
UTF-16 ( BE ) FE FF 254 255 þÿ ЧЪ юя ■  rés – nem szakadó
UTF-16 ( LE ) FF FE 255 254 ÿþ ЪЧ яю  ■
UTF-32 (BE) 00 00 FE FF 0 0 254 255 ␀␀þÿ ␀␀ЧЪ ␀␀юя ␀␀■  ␀ - NUL , szóköz - törésmentes
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 ␎þÿ ␎■  ␎ - pl. Shift Out szimbólum, a hely töretlen
BOCU-1 [t1] FB EE 28 251 238 40 ûî √ю(
GB-18030 [t1] 84 31 95 33 132 49 149 51 �1�3 Д1Х3 � — értékek nélküli kódok
  1. 1 2 3 4 5 6 7 Ezekben a kódolásokban a szekvencia nem pontosan határozza meg a bájtsorrendet , mivel a kódolás egybájtos, de ez a sorozat használható a kódolási mód meghatározására. [2] [3]
  2. Az UTF-7-ben a base-64 használata miatt a BOM negyedik bájtja 001111xxbináris ábrázolásban van, ahol xxa következő karaktertől függ (a BOM utáni elsőtől). Ezért a negyedik bájt nem csak a darabjegyzék része, hanem a következő (nem BOM) karakterrel kapcsolatos információkat is tartalmaz. xx=00, 01, 10, esetén 11a negyedik bájt rendre , 38, 39, 2Bvagy 2Fha base64-ben van kódolva. Ha a következő karakter nem base64 kódolású, akkor 38negyedik bájtként kerül felhasználásra, a következő bájt pedig 2D.
  3. Az SCSU más kódolásokat is biztosít az U+FEFF-hez, a megadott sorrend ajánlott az UTR #6-ban. [négy]

Nehézségek, amelyeket figyelembe kell venni a

Vannak esetek, amikor a bájtszekvencia marker használatát annak kényelme ellenére kerülni kell. Ha például jelölőt használ a websablonokban , akkor üres sorok jelennek meg a dokumentumban, ezért célszerű eltávolítani a jelölőt a webes szkriptekből és CSS - fájlokból. És ha a PHP fájlok elején (a címke előtt <?php) van egy marker, akkor a program egy üres karakterláncot küld a kliensnek, még mielőtt a kód végrehajtása megkezdődött volna, ami meghibásodást okoz olyan esetekben, amikor a HTTP fejlécet azonnal el kell küldeni az ügyfél (például egy kérés átirányításakor). [5] Az is előfordulhat, hogy helytelenül dolgozza fel a json_decode értéket , ha a json egy BOM-mal rendelkező fájlba van írva.

Jegyzetek

  1. A byte-order mark (BOM) a HTML-ben  . www.w3.org. Letöltve: 2018. szeptember 19. Az eredetiből archiválva : 2018. augusztus 17.
  2. GYIK - UTF-8, UTF-16, UTF-32 és BOM: Tartalmazhatja az UTF-8 adatfolyam a BOM karaktert (UTF-8 formában)? Ha igen, akkor továbbra is feltételezhetem, hogy a fennmaradó UTF-8 bájtok nagy sorrendben vannak? . Letöltve: 2009. január 4. Az eredetiből archiválva : 2012. szeptember 1..
  3. STD 63: UTF-8, az ISO 10646 átalakítása Archiválva : 2011. október 25. a Wayback Machine Byte Order Mark (BOM) -nál
  4. UTR #6: Az SCSU aláírási bájtsorozata . Letöltve: 2011. október 18. Az eredetiből archiválva : 2011. október 6..
  5. Lehetséges problémák az UTF-8 BOM-mal . Letöltve: 2017. május 3. Az eredetiből archiválva : 2017. június 13.