Tavusekvenssimerkki

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 16. huhtikuuta 2021 tarkistetusta versiosta . tarkastukset vaativat 4 muokkausta .

Tavusekvenssimerkki tai tavujärjestysmerkki ( English  Byte Order Mark, BOM ) on Unicode -standardin erikoismerkki, joka lisätään tekstitiedoston tai virran alkuun osoittamaan, että tiedostossa (stream) käytetään Unicodea. osoittavat epäsuorasti koodauksen ja tavujärjestyksen , jolla Unicode-merkit koodattiin. Tämän merkin Unicode-numero on U+FEFF. Tämän merkin käyttö Unicode-määrittelyn mukaan on valinnaista, mutta sitä käytetään laajalti, koska sen avulla on helppo välttää tekstitiedon virheellinen dekoodaus.

Käyttö

Unicode-määrityksen mukaan merkki voi näkyä vain tiedoston tai virran alussa. Jos merkki U+FEFFesiintyy tietovirran keskellä, sen täytyy tulkitaan "nollaleveäksi rikkoutumattomaksi välilyönniksi" (olennaisesti ei-näytettävä ja mitään muuttava merkki). Kuitenkin suurin osa[ kuinka paljon? ] muut selaimet kuin Operan versiot 12 ja sitä vanhemmat käsittelevät asiakirjan keskellä olevaa tuoteluetteloa koko rivin varaavana merkinä ja luovat sitten rivinvaihdon [1] .

Unicodessa katkeamattomalle nollaleveydelle välilyönnille on myös erillinen erikoismerkki - U+2060, jota suositellaan käytettäväksi sellaisenaan, ja tavusekvenssimerkkiä U+FEFFsuositellaan käytettäväksi vain sille tarkoitettuun tarkoitukseen.

Jos vastaanottava ohjelma tietää Unicode-merkkien esitysmuodon tarkasti etukäteen, Unicode-standardin mukaan merkkiä ei tule asettaa. Ja jos muoto ilmoitetaan toisella tavalla (esimerkiksi MIME otsikkokentässä Content-Type), merkin ei ole tarkoitus olla standardin mukaan asetettuna.

Koodauksen määrittäminen tavusekvenssimarkkerilla

Tapa, jolla tiedoston tai virran alussa oleva tavusekvenssimerkki on koodattu, voidaan helposti määrittää koodaus ja tavujärjestys, jota käytetään Unicode-merkkien koodaamiseen koko tiedostossa tai virrassa. Tämä seikka oli tärkein syy tavusekvenssimarkkerin laajaan käyttöön.

Koodaus Tavusekvenssimerkkien esitys Merkin esitys virheellisen dekoodauksen tapauksessa eri koodauksella
Hex-koodi Desimaalikoodi ISO-8859-1 KOI8-R CP1251 CP866 kommentti
UTF-8 [t1] EF BB BF 239 187 191  О╩© п»ї я╗┐
UTF-16 ( BE ) FE FF 254 255 þÿ ЧЪ юя ■  rako - rikkoutumaton
UTF-16 ( LE ) FF FE 255 254 ÿþ ЪЧ яю  ■
UTF-32 (BE) 00 00 FE FF 0 0 254 255 ␀␀þÿ ␀␀ЧЪ ␀␀юя ␀␀■  ␀ - NUL , välilyönti - rikkoutumaton
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 ␎þÿ ␎■  ␎ - esim. Shift Out -symboli, tilaa on katkeamaton
BOCU-1 [t1] FB EE 28 251 238 40 ûî √ю(
GB-18030 [t1] 84 31 95 33 132 49 149 51 �1�3 Д1Х3 � — koodit ilman arvoja
  1. 1 2 3 4 5 6 7 Näissä koodauksissa sekvenssi ei tarkasti määritä tavujärjestystä , koska koodaus on yksitavuinen, mutta tätä sekvenssiä voidaan käyttää koodausmenetelmän määrittämiseen. [2] [3]
  2. UTF-7:ssä base-64:n käytöstä johtuen materiaaliluettelon neljäs tavu on 001111xxbinäärimuodossa, missä se xxriippuu seuraavasta merkistä (ensimmäisestä merkin jälkeen). Siksi neljäs tavu ei ole vain osa materiaaliluetteloa, vaan sisältää myös tietoa seuraavasta (ei-tekstiluettelosta) merkistä. Kohdassa xx=00, 01, 10, 11neljäs tavu on vastaavasti , 38, 39, 2Btai 2Fkun se on koodattu base64:ssä. Jos seuraava merkki ei ole base64-koodattu, sitä käytetään 38neljäntenä tavuna ja seuraava tavu on 2D.
  3. SCSU tarjoaa muita koodauksia U+FEFF:lle, määriteltyä sekvenssiä suositellaan UTR #6:ssa. [neljä]

Vaikeuksia, jotka on otettava huomioon käytettäessä

On tapauksia, joissa tavusekvenssimarkkerin käyttöä tulisi välttää sen mukavuudesta huolimatta. Esimerkiksi merkin käyttäminen verkkomalleissa saa aikaan tyhjiä rivejä asiakirjassa, joten on hyvä idea poistaa merkintä verkkoskripteistä ja CSS - tiedostoista. Ja merkinnän esiintyminen PHP - tiedostojen alussa (ennen tunnistetta <?php) aiheuttaa tyhjän merkkijonon lähettämisen asiakkaalle ennen kuin koodi on edes alkanut suorittaa, mikä aiheuttaa epäonnistumisen tapauksissa, joissa HTTP-otsikko tulee lähettää välittömästi asiakasta (esimerkiksi uudelleenohjattaessa pyyntöä). [5] Se voi myös käsitellä json_decoden virheellisesti, jos json kirjoitetaan tiedostoon, jossa on tuoteluettelo.

Muistiinpanot

  1. Tavujärjestysmerkki (BOM) HTML:  ssä . www.w3.org. Haettu 19. syyskuuta 2018. Arkistoitu alkuperäisestä 17. elokuuta 2018.
  2. FAQ - UTF-8, UTF-16, UTF-32 & BOM: Voiko UTF-8-tietovirta sisältää BOM-merkin (UTF-8-muodossa)? Jos kyllä, voinko silti olettaa, että jäljellä olevat UTF-8-tavut ovat suuressa järjestyksessä? . Haettu 4. tammikuuta 2009. Arkistoitu alkuperäisestä 1. syyskuuta 2012.
  3. STD 63: UTF-8, muunnos ISO 10646: sta. Arkistoitu 25. lokakuuta 2011 Wayback Machine Byte Order Mark (BOM) -koodiin
  4. UTR #6: Allekirjoitustavusekvenssi SCSU:lle . Haettu 18. lokakuuta 2011. Arkistoitu alkuperäisestä 6. lokakuuta 2011.
  5. Mahdollisia ongelmia UTF-8 BOM:n kanssa . Haettu 3. toukokuuta 2017. Arkistoitu alkuperäisestä 13. kesäkuuta 2017.