UTF BOM jest okropne

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.

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ć.