BOM (informatyka)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

BOM (ang. Byte Order Mark) – znacznik kolejności bajtów w wielobajtowym kodowaniu znaków jest zapisywany na początku strumienia bajtów (pliku) i informuje, w jakiej kolejności należy ustawić bajty, aby odczytać kod znaku. BOM rozwiązuje problem interpretacji kolejności bajtów w znaku i umożliwia automatyczną detekcję kodowania UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE oraz ASCII.

Znaczniki BOM zależnie od kodowania[edytuj | edytuj kod]

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 (Kolejność bajtów - nie dotyczy)

Rozpoznawanie kodowania przez edytory[edytuj | edytuj kod]

W wypadku kodowania UTF-8 znacznik kolejności bajtów (BOM) nie jest niezbędny, ponieważ kolejność bajtów jest jednoznaczna. Jeśli jednak BOM dla pliku zakodowanego w UTF-8 jest dostępny, to kodowanie pliku (UTF-8) jest jednoznacznie określone i ułatwia edytorom tekstowym poprawną interpretację znaków.

Część edytorów próbuje wykryć kodowanie pliku, jeśli BOM nie jest dostępny (przez analizę dalszej zawartości pliku, czy analizę statystyczną), inne wyświetlą plik tak, jakby był zakodowany jednobajtowo. Natomiast starsze i mniej zaawansowane edytory mogą w ogóle nie reagować na znacznik BOM, lub pokazać go jako znaki niedrukowalne na początku pliku.

Przykładowo Notatnik w niektórych wersjach systemu Windows stara się wykryć kodowanie wielobajtowe. Jednak przy zapisie takiego pliku dodaje znacznik wykrytego kodowania. To z kolei może powodować, że niektóre skrypty (np. PHP) zostaną nieprawidłowo zinterpretowane i przestaną działać poprawnie.

Lepiej pod tym względem zachowuje się przykładowo Programmer's Notepad, który wykrywa kodowanie, ale pozwala wybrać, czy dany plik zostanie zapisany ze znacznikiem BOM, czy nie.

Uwagi[edytuj | edytuj kod]

BOM powiększa rozmiar danych o kilka bajtów. BOM nie jest zwykle używany w systemach, gdzie z góry jest ustalony sposób kodowania (np. protokoły sieciowe zwykle stosują jeden z UTF-8, albo UTF-16BE) albo które mają oddzielne mechanizmy deklaracji kodowania (nagłówki MIME, nagłówki XML, znacznik meta w HTML).

Zobacz też[edytuj | edytuj kod]