Pada sistem file saya (Windows 7) saya memiliki beberapa file teks (Ini adalah file skrip SQL, jika itu penting).
Ketika dibuka dengan Notepad ++ , di menu "Encoding" beberapa dari mereka dilaporkan memiliki encoding "UCS-2 Little Endian" dan beberapa "UTF-8 tanpa BOM".
Apa bedanya di sini? Semua itu tampaknya merupakan skrip yang benar-benar valid. Bagaimana saya bisa tahu pengkodean apa yang dimiliki file tanpa Notepad ++?
enca
danchardet
untuk sistem POSIX.iconv
khususnya berguna untuk tujuan ini. Pada dasarnya Anda mengulang string karakter yang rusak / teks melalui pengkodean yang berbeda untuk melihat mana yang bekerja. Anda menang, ketika karakter tidak lagi rusak. Saya ingin menjawab di sini, dengan contoh programatik. Namun sayangnya pertanyaan ini dilindungi.chardet
atauchardetect
tidak tersedia di sistem Anda, maka Anda dapat menginstal paket melalui manajer paket Anda (misalnyaapt search chardet
- di ubuntu / debian paket biasanya disebutpython-chardet
ataupython3-chardet
) atau melalui pip denganpip install chardet
(ataupip install cchardet
untuk versi c-dioptimalkan lebih cepat).Jawaban:
File biasanya menunjukkan encoding mereka dengan header file. Ada banyak contoh di sini . Namun, bahkan membaca tajuk Anda tidak akan pernah bisa memastikan penyandian file apa yang sebenarnya digunakan .
Sebagai contoh, sebuah file dengan tiga byte pertama
0xEF,0xBB,0xBF
adalah mungkin UTF-8 file disandikan. Namun, itu mungkin file ISO-8859-1 yang akan dimulai dengan karakter
. Atau mungkin tipe file yang berbeda sama sekali.Notepad ++ melakukan yang terbaik untuk menebak encoding file apa yang digunakan, dan sebagian besar waktu membuatnya benar. Kadang-kadang itu memang salah - karena itulah menu 'Pengkodean' itu ada, sehingga Anda dapat mengesampingkan tebakan terbaiknya.
Untuk dua penyandian yang Anda sebutkan:
0xFF,0xFE
2 byte pertama. Dari apa yang saya tahu, Notepad ++ menggambarkannya sebagai "UCS-2" karena tidak mendukung aspek UTF-16 tertentu.sumber
Kamu tidak bisa. Jika Anda bisa melakukannya, tidak akan ada begitu banyak situs web atau file teks dengan "omong kosong acak" di luar sana. Itu sebabnya pengkodean biasanya dikirim bersama dengan payload sebagai meta data.
Jika tidak, yang bisa Anda lakukan adalah "tebakan pintar" tetapi hasilnya sering ambigu karena urutan byte yang sama mungkin berlaku dalam beberapa penyandian.
sumber