Jak sprawdzić, czy plik ma BOM w tekście utf-8

18

Jak mogę sprawdzić, czy plik tekstowy utf-8 ma BOM z wiersza poleceń?

filepolecenie pokazuje mi UTF-8 Unicode text.

Ale nie wiem, to znaczy, że w pliku nie ma BOM.

Używam Ubuntu 12.04.

żelazko i piasek
źródło
Zauważ, że w UTF-8 nie ma BOM: jest to cecha UTF-16. Plik UTF-8 może zaczynać się od znaku U + FEFF, ale w takim przypadku jest to przestrzeń o zerowej szerokości.
Gilles „SO - przestań być zły”,

Odpowiedzi:

30

filepoinformuje Cię, czy istnieje BOM. Możesz przetestować:

$ /usr/bin/printf "\ufeff...\n" | file -
/dev/stdin: UTF-8 Unicode (with BOM) text

Uwaga: zgodnie z filedziennikiem zmian ta funkcja istniała już w 2007 roku. Powinno to działać na każdym bieżącym komputerze.

vinc17
źródło
1
Dziękuję za odpowiedź. Moja filewersja jest file-5.09i wynik był /dev/stdin: ASCII text. Czy to zależy od wersji file?
ironsand
@Tetsu Testowałem z file5.04 (wyciskanie Debiana) i było OK. Nawet w 2007 r., Zgodnie z dziennikiem zmian (nie testowano). Ale możesz wykonać test, który podałem w mojej odpowiedzi.
vinc17,
Właśnie zainstalowałem language-pack-jaz apt, wtedy twój przykład działa idealnie. Dzięki za pomoc!
ironsand
4

Jeśli wykonasz stat fileName, powinno ci dać dokładnie trzy znaki. Kiedy otworzyłem plik w edytorze, nic nie widziałem. Więc zauważenie, że rozmiar pliku wynosił 3, dało mi jasność, że ma BOM.

Również post tutaj był pomocny w moim przypadku.

hexdump -n 3 -C 2.txt
00000000 ef bb bf
ef bb bf // YES
akshita007
źródło