Apakah ada perintah Linux untuk mengetahui apakah suatu file adalah UTF-8?

14

File Joomla .iniharus disimpan sebagai UTF-8.

Setelah mengedit saya tidak yakin apakah file-file tersebut UTF-8 atau tidak.

Apakah ada perintah Linux suka fileatau beberapa perintah yang akan memberi tahu apakah suatu file memang UTF-8 atau tidak?

Edward
sumber
4
Anda tidak dapat memberi tahu penyandian file. Anda hanya bisa membuat tebakan yang cerdas. Anda mungkin menebak sebagian besar benar, tetapi kadang-kadang menebak gagal. fileadalah contoh program melakukan tebakan cerdas.
Marco
1
@ Marsco: Mungkin saja memverifikasi apakah itu UTF-8 yang valid atau tidak. Ada beberapa penyandian yang keliru dapat lulus sebagai UTF-8 yang valid, tetapi hampir tidak pernah terjadi dengan penyandian / rangkaian karakter ISO-8859-š¯’¸ atau Windows-125š¯’¸.
user1686

Jawaban:

28

Anda dapat menentukan pengkodean file dengan perintah berikut:

file -bi filename
Rik
sumber
3
@nicolas Untuk MacOS Anda bisa mencoba file -I filename(-Aku adalah modal besar).
Rik
5
Apakah ini membaca seluruh file?
ctrl-alt-delor
2
@ kojow7 utf-8 tidak memiliki header. Pure ASCII (hanya 7-bit), tidak dapat dibedakan dari utf-8 (maksudnya, header akan menyebabkan semua jenis masalah). Jadi jika Anda memiliki file yang ASCII untuk MB pertama kemudian memiliki karakter UTF-8 tunggal, maka Anda tidak akan tahu, kecuali jika Anda membaca seluruh file.
ctrl-alt-delor
3
Ini seharusnya tidak diterima sebagai jawabannya. Perintah 'file' tidak melakukan itu; itu hanya membaca sebagian file dan menggunakan angka ajaib untuk mengambil tebakan terbaik. Terkadang 'file' dapat dan akan memberi Anda jawaban yang salah. Untuk memverifikasi apakah suatu file melewati penyandian seperti ascii, iso-8859-1, utf-8 atau apa pun maka solusi yang baik adalah dengan menggunakan perintah 'iconv'.
Tim
1
Saya sudah mengujinya, dan itu bisa gagal.
Tim
9

Ada, gunakan isutf8perintah dari paket moreutils .

Sumber: Bagaimana Anda bisa tahu apakah suatu file dikodekan UTF-8 atau tidak?


Pablo Olmos de Aguilera C.
sumber
@davidpostill Saya ingin tahu, apakah praktik buruk mengutip penulis dalam referensi?
Pablo Olmos de Aguilera C.
Tidak. Namun, merupakan praktik yang baik untuk membuat tautan mengatakan ke mana arahnya. Asumsikan saya hanya membaca teks biru. Setelah diedit, saya bisa tahu mengapa dan kapan saya harus mengklik itu. Sebelumnya, saya tidak bisa. (Bukan saya yang membuat suntingan tetapi saya seperti 94% yakin bahwa ini adalah tentang itu.)
Hermann Dƶppes
Bagus, dan bekerja dengan baik find -type f -exec isutf8 {} +, karena ia juga mengutip nama file. (Dan dengan menggunakan find ... -exec ... +juga cepat)
Tomasz Gandor
2

Jangan gunakan fileperintah. Itu tidak memeriksa seluruh file, dan pada dasarnya menebak. Terkadang memberikan jawaban yang salah.

Anda dapat memverifikasi apakah ada file yang lulus pengkodean UTF-8 seperti ini:

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

Kode pengembalian nol berarti melewati UTF8. Kode pengembalian non-nol berarti tidak valid UTF8.

Tidaklah mungkin untuk mengetahui apakah suatu file perlu diekspor menggunakan skema penyandian tertentu, karena beberapa skema penyandian tumpang tindih. Untuk melakukan itu akan membutuhkan metadata untuk tertanam dalam file, dan bahkan kemudian Anda akan menaruh kepercayaan pada siapa pun yang menghasilkan file itu, daripada memvalidasi sendiri ... dan Anda harus selalu memvalidasi sendiri.

Tim
sumber
0

Namun cara lain adalah dengan menggunakan recode, yang akan keluar dengan kesalahan jika mencoba untuk memecahkan kode UTF-8 dan menemukan karakter yang tidak valid.

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
mivk
sumber