Saya punya beberapa masalah dengan file subtitle dalam video omxplayer. Untuk mengatasinya saya harus mengkonversi dari Windows-1250 ke UTF-8 encoding. Pertanyaan saya adalah, bagaimana saya bisa melihat file tertentu yang menggunakan pengkodean?
Saya punya beberapa masalah dengan file subtitle dalam video omxplayer. Untuk mengatasinya saya harus mengkonversi dari Windows-1250 ke UTF-8 encoding. Pertanyaan saya adalah, bagaimana saya bisa melihat file tertentu yang menggunakan pengkodean?
Jawaban:
Anda tidak dapat benar-benar mengetahui secara otomatis apakah suatu file ditulis dengan penyandian X.
Apa yang dapat Anda lakukan dengan mudah adalah memverifikasi apakah file lengkap dapat berhasil diterjemahkan entah bagaimana (tetapi tidak harus dengan benar) menggunakan codec tertentu. Jika Anda menemukan byte yang tidak valid untuk pengkodean yang diberikan, itu pasti sesuatu yang lain.
Masalahnya adalah banyak codec yang serupa dan memiliki "pola byte yang valid" yang sama, hanya menafsirkannya sebagai karakter yang berbeda. Misalnya, ä
pengkodean dalam satu mungkin sesuai dengan yang é
lain atau ø
dalam yang ketiga. Komputer tidak dapat benar-benar mendeteksi cara menafsirkan hasil byte dalam teks yang dapat dibaca manusia dengan benar (kecuali jika Anda menambahkan kamus untuk semua jenis bahasa dan membiarkannya melakukan pemeriksaan ejaan ...). Anda juga harus tahu bahwa beberapa set karakter sebenarnya adalah himpunan bagian dari yang lain, seperti misalnya pengkodean ASCII adalah bagian dari codec yang paling umum digunakan seperti beberapa keluarga ANSI atau UTF-8. Itu berarti misalnya teks yang disimpan sebagai UTF-8 yang hanya berisi karakter latin sederhana, itu akan identik dengan file yang sama disimpan sebagai ASCII.
Namun, mari kita kembali dari menjelaskan apa yang tidak dapat Anda lakukan ke apa yang sebenarnya dapat Anda lakukan:
Untuk pemeriksaan dasar pada file teks ASCII / non-ASCII (biasanya UTF-8), Anda dapat menggunakan file
perintah. Itu tidak tahu banyak codec dan hanya memeriksa beberapa kB pertama file, dengan asumsi bahwa sisanya tidak akan mengandung karakter baru. Di sisi lain, ia juga mengenali tipe file umum lainnya seperti berbagai skrip, dokumen HTML / XML dan banyak format data biner (yang semuanya tidak menarik untuk membandingkan file teks) dan mungkin dapat mencetak informasi tambahan apakah ada garis yang sangat panjang atau apa. jenis urutan baris baru (misalnya UNIX: LF, Windows: CR + LF) digunakan.
$ cat ascii.txt
I am an ASCII file.
Just text and numb3rs and simple punctuation...
$ cat utf8.txt
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!
$ file ascii.txt utf8.txt
ascii.txt: ASCII text
utf8.txt: UTF-8 Unicode text
Jika itu tidak cukup, saya dapat menawarkan kepada Anda skrip Python yang saya tulis untuk jawaban ini di sini , yang memindai file lengkap dan mencoba memecahkan kode menggunakan set karakter yang ditentukan. Jika berhasil, pengodean itu adalah kandidat potensial. Kalau tidak, jika ada byte yang tidak dapat diterjemahkan dengan itu, Anda dapat menghapus set karakter dari daftar Anda.
Sebuah program bernama file
dapat melakukan ini. Contoh:
$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators
Jika Anda tertarik untuk melakukannya, lihat src/encoding.c
.
file
membuat tebakan, dan sering kali itu tidak terlalu bagus. Sebagai contoh, dalam pengujian saya, salah mengidentifikasi MacRoman dan CP-1252 sebagai ISO-8859, dengan hasil bahwa "š" dan "ß" diacak.
.sql
file lama saya dan file
menunjukkan kepada saya bahwa itu memang gzip
file terkompresi!
piconv
untuk mengubah pengkodean;)