Cara memeriksa apakah file memiliki BOM dalam utf-8 teks

18

Bagaimana saya bisa mengecek apakah file teks utf-8 memiliki BOM dari command line?

fileperintah menunjukkan kepada saya UTF-8 Unicode text.

Tapi saya tidak tahu itu berarti tidak ada BOM dalam file tersebut.

Saya menggunakan Ubuntu 12.04.

pasir besi
sumber
Perhatikan bahwa tidak ada BOM di UTF-8: itu adalah fitur UTF-16. File UTF-8 dapat dimulai dengan karakter U + FEFF, tetapi dalam kasus itu adalah ruang dengan lebar nol.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

30

fileakan memberi tahu Anda jika ada BOM. Anda dapat menguji:

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

Catatan: menurut filechangelog, fitur ini sudah ada pada 2007. Jadi, ini harus bekerja pada mesin apa pun saat ini.

vinc17
sumber
1
Terima kasih atas jawabannya. fileVersi saya adalah file-5.09dan hasilnya /dev/stdin: ASCII text. Apakah ini tergantung pada versi file?
ironsand
@Tetsu saya diuji dengan file5.04 (memeras Debian) dan itu OK. Bahkan pada 2007, menurut changelog (tidak diuji). Tetapi Anda dapat melakukan tes yang saya berikan dalam jawaban saya.
vinc17
Saya baru saja menginstal language-pack-jadari apt, maka contoh Anda berfungsi dengan baik. Terima kasih atas bantuan Anda!
ironsand
4

Jika Anda menjalankannya stat fileNameharus memberi Anda tepat tiga karakter. Ketika saya membuka file di editor, saya tidak dapat melihat apa pun. Jadi memperhatikan bahwa ukuran file adalah 3 memberi saya kejelasan bahwa ia memiliki BOM.

Juga, posting di sini sangat membantu dalam kasus saya.

hexdump -n 3 -C 2.txt
00000000 ef bb bf
ef bb bf // YES
akshita007
sumber