Saya perlu menemukan penyandian semua file yang ditempatkan di direktori. Apakah ada cara untuk menemukan pengkodean yang digunakan?
The file
perintah ini tidak dapat melakukan hal ini.
Pengkodean yang menarik bagi saya adalah: ISO-8859-1. Jika penyandiannya adalah hal lain, saya ingin memindahkan file ke direktori lain.
apropos encoding
. Itu mencari judul dan deskripsi dari semua halaman buku. Ketika saya melakukan ini pada mesin saya, saya melihat 3 alat yang bisa membantu saya, dilihat deskripsi mereka:chardet
,chardet3
,chardetect3
. Kemudian, dengan melakukanman chardet
dan membaca halaman manual memberitahu saya bahwachardet
itu hanya utilitas yang saya butuhkan.us-ascii
, tetapi setelah menambahkan baris komentar bahasa Mandarin, itu menjadiutf-8
.file
dapat mengetahui penyandian dengan membaca konten file & tebak.Jawaban:
Sepertinya Anda sedang mencari
enca
. Itu bisa menebak dan bahkan mengkonversi antar pengkodean. Lihat saja halaman manualnya .Atau, jika gagal, gunakan
file -i
(linux) ataufile -I
(osx). Itu akan menampilkan informasi tipe MIME untuk file, yang juga akan mencakup pengkodean karakter-set. Saya menemukan halaman manual untuk itu juga :)sumber
enca
tampaknya sama sekali tidak berguna untuk menganalisis file yang ditulis dalam bahasa Inggris, tetapi jika Anda kebetulan melihat sesuatu dalam bahasa Estonia, itu mungkin menyelesaikan semua masalah Anda. Alat yang sangat membantu, itu ... </Jika Anda suka melakukan ini untuk banyak file
sumber
Do not prepend filenames to output lines
file -b --mime-encoding
hanya output pengkodean charsetuchardet - Pustaka detektor pengkodean porting dari Mozilla.
Pemakaian:
Berbagai distribusi Linux (Debian / Ubuntu, OpenSuse-packman, ...) menyediakan binari.
sumber
sudo apt-get install uchardet
begitu mudahnya sehingga saya memutuskan untuk tidak khawatir tentang hal itu ...uchardet
memiliki kelebihan yang besarfile
danenca
, dalam hal ini menganalisis seluruh file (hanya mencoba dengan file 20GiB) sebagai lawan hanya awal.di sini adalah contoh skrip menggunakan file -I dan iconv yang berfungsi di MacOsX Untuk pertanyaan Anda, Anda perlu menggunakan mv, bukan iconv
sumber
file -b --mime-encoding
hanya menghasilkan charset, sehingga Anda dapat menghindari semua pemrosesan pipaSangat sulit untuk menentukan apakah itu iso-8859-1. Jika Anda memiliki teks dengan karakter hanya 7 bit yang juga bisa iso-8859-1 tetapi Anda tidak tahu. Jika Anda memiliki 8 bit karakter maka karakter wilayah atas juga ada dalam penyandian urutan. Oleh karena itu Anda harus menggunakan kamus untuk mendapatkan tebakan yang lebih baik dari kata mana dan menentukan dari mana huruf itu harus. Akhirnya jika Anda mendeteksi bahwa itu mungkin utf-8 daripada Anda yakin itu bukan iso-8859-1
Pengkodean adalah salah satu hal tersulit untuk dilakukan karena Anda tidak pernah tahu jika tidak ada yang memberi tahu Anda
sumber
Di Debian Anda juga dapat menggunakan
encguess
::sumber
uchardet
di Ubuntu dan memberitahu saya bahwa file sayaWINDOWS-1252
. Saya tahu ini salah karena saya menyimpannya sebagai UTF-16 dengan Kate, untuk diuji. Namun,encguess
tebak dengan benar, dan sudah diinstal sebelumnya di Ubuntu 19.04.Untuk mengonversi pengkodean dari 8859 ke ASCII:
sumber
Dengan Python, Anda dapat menggunakan modul chardet: https://github.com/chardet/chardet
sumber
Ini bukan sesuatu yang bisa Anda lakukan dengan cara yang sangat mudah. Satu kemungkinan adalah untuk memeriksa setiap karakter dalam file untuk memastikan bahwa itu tidak mengandung karakter apa pun dalam rentang
0x00 - 0x1f
atau0x7f -0x9f
tetapi, seperti yang saya katakan, ini mungkin benar untuk sejumlah file, termasuk setidaknya satu varian lain dari ISO8859.Kemungkinan lain adalah mencari kata-kata spesifik dalam file dalam semua bahasa yang didukung dan melihat apakah Anda dapat menemukannya.
Jadi, misalnya, temukan padanan dari bahasa Inggris "dan", "tetapi", "ke", "dari" dan seterusnya dalam semua bahasa yang didukung 8859-1 dan lihat apakah mereka memiliki banyak kemunculan dalam mengajukan.
Saya tidak berbicara tentang terjemahan literal seperti:
walaupun itu mungkin. Saya berbicara tentang kata-kata umum dalam bahasa target (yang saya tahu, bahasa Islandia tidak memiliki kata untuk "dan" - Anda mungkin harus menggunakan kata mereka untuk "ikan" [maaf itu agak stereotip, saya tidak berarti pelanggaran apa pun, hanya menggambarkan suatu poin]).
sumber
Saya tahu Anda tertarik pada jawaban yang lebih umum, tetapi apa yang baik dalam ASCII biasanya baik dalam pengkodean lainnya. Berikut ini adalah satu-baris Python untuk menentukan apakah input standar adalah ASCII. (Saya cukup yakin ini berfungsi di Python 2, tapi saya baru mengujinya di Python 3.)
sumber
Jika Anda berbicara tentang file XML (ISO-8859-1), deklarasi XML di dalamnya menentukan pengkodean:
<?xml version="1.0" encoding="ISO-8859-1" ?>
Jadi, Anda dapat menggunakan ekspresi reguler (misalnya dengan
perl
) untuk memeriksa setiap file untuk spesifikasi tersebut.Informasi lebih lanjut dapat ditemukan di sini: Cara Menentukan Encoding File Teks .
sumber
Di php Anda dapat memeriksa seperti di bawah ini:
Menentukan daftar penyandian secara eksplisit:
"Mb_list_encodings" lebih akurat:
Di sini, dalam contoh pertama, Anda dapat melihat bahwa saya meletakkan daftar penyandian (deteksi urutan daftar) yang mungkin cocok. Untuk mendapatkan hasil yang lebih akurat, Anda dapat menggunakan semua kemungkinan penyandian melalui: mb_list_encodings ()
Catatan fungsi mb_ * membutuhkan php-mbstring
sumber
Di Cygwin, ini sepertinya bekerja untuk saya:
Contoh:
Anda dapat menyalurkannya ke awk dan membuat perintah ikonv untuk mengonversi semuanya menjadi utf8, dari pengodean sumber apa pun yang didukung oleh ikonv.
Contoh:
sumber
Anda dapat mengekstrak penyandian satu file dengan perintah file. Saya memiliki file sample.html dengan:
sample.html: Dokumen HTML, teks Unicode UTF-8, dengan garis yang sangat panjang
Dokumen HTML, teks UTF-8 Unicode, dengan garis yang sangat panjang
teks / html; charset = utf-8
utf-8
sumber
Saya menggunakan skrip berikut untuk
.
sumber
dengan perintah ini:
Anda dapat membuat daftar semua file dalam direktori dan subdirektori dan encoding yang sesuai.
sumber
Dengan Perl, gunakan Encode :: Detect.
sumber