Aký je rozdiel medzi UTF-8 a UTF-8 bez BOM?

Čím sa líši UTF-8 od UTF-8 bez BOM? Ktorý je lepší?

Riešenie

UTF-8 BOM je postupnosť bajtov na začiatku textového toku (EF BB BF), ktorá umožňuje čítačke spoľahlivejšie odhadnúť, či je súbor kódovaný v UTF-8.

Za normálnych okolností sa BOM používa na signalizáciu endianity kódovania, ale keďže endianita je pre UTF-8 irelevantná, BOM nie je potrebný.

Podľa normy Unicode sa BOM pre súbory UTF-8 neodporúča:

2.6 Schémy kódovania


... Použitie BOM sa pre UTF-8 nevyžaduje ani neodporúča, ale môže byť vyskytnúť v kontextoch, keď sa údaje UTF-8 konvertujú z iných foriem kódovania, ktoré používajú BOM, alebo keď sa BOM používa ako UTF-8 podpis. Pozri podkapitolu "Značka poradia bajtov" v oddiele 16.8, Špeciálne znaky, pre viac informácií.

Komentáre (26)

UTF-8 bez BOM nemá BOM, čo ho nerobí lepším ako UTF-8 s BOM, okrem prípadov, keď spotrebiteľ súboru potrebuje vedieť (alebo by mal prospech z toho, keby vedel), či je súbor kódovaný v UTF-8 alebo nie.

BOM je zvyčajne užitočný na určenie endianity kódovania, čo sa vo väčšine prípadov použitia nevyžaduje.

Okrem toho môže byť BOM zbytočným šumom/námahou pre tých spotrebiteľov, ktorí ho nepoznajú alebo sa oň nezaujímajú, a môže viesť k zmätku používateľa.

Komentáre (2)

Z adresy http://en.wikipedia.org/wiki/Byte-order_mark:

Značka poradia bajtov (BOM) je znak Unicode znak používaný na signalizáciu endianitu (poradie bajtov) textového súboru alebo toku. Jej kódový bod je U+FEFF. Použitie BOM je nepovinné, a ak sa použije, by sa mal objaviť na začiatku textu toku. Okrem špecifického použitia ako indikátor poradia bajtov, BOM znak môže tiež indikovať, ktorý z niekoľkých reprezentácií Unicode je text zakódovaný.

Vždy používajte BOM vo svojom súbore, čím zabezpečíte, že sa vždy správne otvorí v editore, ktorý podporuje UTF-8 a BOM.

Môj skutočný problém s absenciou BOM je nasledujúci. Predpokladajme, že máme súbor, ktorý obsahuje:

abc

Bez BOM sa vo väčšine editorov otvorí ako ANSI. Takže iný používateľ tento súbor otvorí a pridá do neho niektoré natívne znaky, napr:

abg-αβγ

Ups... Teraz je súbor stále v ANSI a hádajte čo, "αβγ" nezaberá 6 bajtov, ale 3. To nie je UTF-8 a spôsobuje to ďalšie problémy neskôr vo vývojovom reťazci.

Komentáre (5)