Mikä on BOM?
Tavujärjestysmerkki (BOM) tai tavujärjestysmerkki on erityinen merkki, joka lisätään Unicode-tiedostoon, joka on koodattu UTF-8-, UTF16- tai UTF-32-tiedostoilla tunnistamaan Unicode-tiedoston koodaustyypin. UTF-8:ssa BOM:ia ei tarvita, sillä sitä käytetään monitavuisen tiedoston koodaustyypin ja tavujärjestyksen (big-endian tai little-endian) merkitsemiseen. UTF-8:ssa kunkin merkin koodattujen bittien määrä ilmaistaan ensimmäisellä tavulla, eikä big-endianin ja little-endianin välillä ole eroa. UTF-8 ei vaadi BOM:ia, vaikka Unicode-standardi sallii BOM:ien käytön UTF-8:ssa. Siksi UTF-8 ilman BOM:ia on standardimuoto, ja Microsoftilla on tapana sijoittaa BOM UTF-8-tiedostoon (muuten: Microsoftilla on myös tapa kutsua UTF-16:ta BOM:lla "Unicodeksi" menemättä yksityiskohtiin). BOM:t valmistellaan UTF-16:lle ja UTF-32:lle tavujärjestyksen merkitsemiseksi. Microsoft käyttää BOM:ia UTF-8:ssa, koska se mahdollistaa selkeän eron UTF-8:n ja ASCII-koodauksen välillä, muuten CSV-tiedoston avaaminen Excelissä voi olla sekava. Mutta tällainen tiedosto voi aiheuttaa ongelmia myös muissa käyttöjärjestelmissä kuin Windowsissa. Ero "UTF-8":n ja "UTF-8:n BOM:lla" välillä on siinä, onko olemassa BOM:ia vai ei. Eli siitä, onko tiedoston alussa U+FEFF. UTF-8:n verkkokoodissa ei tulisi käyttää BOMeja, muuten virheet ovat yleisiä. Kun CSV-tiedosto lähetetään http-vastauksesta, sitä ei oletuksena sisällytetä, kun se on asetettu utf8-arvoon BOM, mutta Windows Excel käyttää BOM:ia UTF8-koodauksen vahvistamiseen, ja kaikkien täytyy kirjoittaa BOM tiedoston alkuun.
Kun kehität ensimmäistä kertaa Java-koodigeneraattorin, laitat tiedoston suoraanKirjoita UTF-8-tiedostoon, joka sisältää BOM-taginTämä johtaa pakkausvirheisiin seuraavasti:
Laittomat hahmot: '\ufeff'
Miten käytän .NET / C# -tiedostoja selvittääkseni, sisältääkö tiedosto BOM-tageja? , koodi on seuraava:
Kollegat, liitettyMuuntaa UTF-8 BOM-muodon UTF-8 (ilman BOM-tageja) muotoon, koko koodi on seuraava:
(Loppu)
|