Takie małe, a może sprawiać tyle problemów…
BOM to trzy bajty EF BB BF
mające na celu ułatwienie otwierającemu plik tesktowy stwierdzenie, że jest to UTF-8.
Dlaczego piszę ten post? Bo właśnie spędziłem ponad godzinę edytując poprzedni post na tysiące sposobów i cały czas dostając dziwny błąd podczas generacji plików HTML.
Znalazłem winowajcę. Libre Writer w którym sprawdzam pisownię.
BOM pomaga stwierdzić czy dany plik jest w UTF-8, czy nie. Ale nie jest potrzebny, bo są inne metody stwierdzenia czy plik jest w kodowaniu UTF-8.
Sprawa jest prosta - BOM na Linuxie nie ma prawa bytu. Niestety kiedy pracujemy w środowiskach mieszanych, zdarza się że dostaniemy plik zapisany na Windowsie, gdzie BOM jest często domyślnym kodowaniem.
Normalnie BOM powinien być ignorowany - tak mówi standard. ALE! prawie nikt o tym nie pamięta.
Wobec czego za każdym razem kiedy mamy program pracujący na plikach tekstowych, w których formacie istotne jest pierwsze parę znaków, to wstawiając na początku BOM niszczymy ten format.
W szczególności:
- shebang - np. w
#!/bin/bash
. Te#!
to specjalna instrukcja powłok mówiąca “uruchom poniższy skrypt w środowisku <to co po niej występuje>” - JSON - standard zabrania BOM
- YAML front matter - oczekiwane pierwsze znaki to
---
Niestety Visual Studio i czasem VS Code “lubią” dawać nowym plikom kodowanie UTF-8 z BOM i trzeba pamiętać, aby je tępić.