BOM (ang. Byte Order Mark), znacznik kolejności bajtów[1]znak niedrukowalny używany w wielobajtowym kodowaniu znaków, który 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 oraz UTF-32BE.

Znaczniki BOM zależnie od kodowania

Kodowanie Kolejne bajty BOM
szesnastkowo w kodowaniu ISO 8859-1
UTF-16LE FF FE ÿþ
UTF-16BE FE FF þÿ
UTF-32LE FF FE 00 00[i] ÿþ␀␀[ii]
UTF-32BE 00 00 FE FF ␀␀þÿ[ii]
UTF-8[iii] EF BB BF 
  1. tak samo zaczyna się ciąg w kodowaniu UTF-16LE z BOM z pierwszym znakiem null
  2. a b – znak zastępczy dla null
  3. Kodowanie UTF-8 nie ma wariantów zależnych od kolejności bajtów.

Rozpoznawanie kodowania przez edytory

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

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

Przypisy

  1. Dokumentacja unicode

Zobacz też


Witaj

Uczę się języka hebrajskiego. Tutaj go sobie utrwalam.

Źródło

Zawartość tej strony pochodzi stąd.

Odsyłacze

Generator Margonem

Podziel się