BOM

Z Wikipedii

Skocz do: nawigacji, szukaj

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.

[edytuj] Zobacz też