BOM
Z Wikipedii
BOM (ang. Byte Order Mark - znacznik kolejności bajtów) – w wielobajtowym kodowaniu znaków o stałej długości (tzn. takim, że każdy znak jest zapisany za pomocą takiej samej liczby bajtów, np. UTF-16 - 2 bajty, UTF-32 - 4 bajty) pojawia się problem interpretacji kolejności bajtów w znaku. Rozwiązaniem tego problemu jest właśnie BOM. Na początku strumienia bajtów (np. początek pliku) zapisuje się znacznik kolejności bajtów (BOM), informujący w jakiej kolejności należy ustawić bajty, aby uzyskać kod znaku.
kodowanie | BOM dla Little-endian | BOM dla Big-endian |
UTF-16 | 0xff 0xfe | 0xfe 0xff |
UTF-32 | 0xff 0xfe 0x00 0x00 | 0x00 0x00 0xfe 0xff |
UTF-8 | 0xef 0xbb 0xbf (ani Little-endian ani Big-endian) |
Kodowanie UTF-8 nie potrzebuje znacznika kolejności bajtów (BOM), ponieważ jest kodowaniem o zmiennej długości i kolejność bajtów jest jednoznaczna. Stąd też BOM dla UTF-8 jest nieobowiązkowy.
Niektóre edytory nie potrafią odczytać pliku UTF-8 jeśli brak BOM. Inne wprost przeciwnie, to właśnie obecność BOM powoduje kłopoty. Przykładowo program Notatnik stara się obsługiwać to automatycznie. Otóż jeśli tworzymy nowy plik i zapiszemy go za pomocą kodowania UTF-8, to Notatnik doda na początku BOM. Oczywiście w Notatniku go nie widać, ale można się o tym przekonać zapisując pusty plik. Okaże się, że ma długość 3 bajtów. Jeśli otworzymy w Notatniku plik zapisany za pomocą kodowania UTF-8, ale bez BOM, to Notatnik prawidłowo odczyta plik; mało tego, jeśli coś zmienimy, to przy powtórnym zapisaniu również go nie doda. Dopiero wybranie polecenia Zapisz jako spowoduje dodanie BOM.