Video omxplayer altyazı dosyaları ile bazı problemler vardı. Bunu çözmek için windows-1250'den UTF-8 kodlamasına dönüştüm. Sorum şu, kodlamanın kullanıldığı belirli bir dosyayı nasıl görebilirim?
Video omxplayer altyazı dosyaları ile bazı problemler vardı. Bunu çözmek için windows-1250'den UTF-8 kodlamasına dönüştüm. Sorum şu, kodlamanın kullanıldığı belirli bir dosyayı nasıl görebilirim?
Yanıtlar:
Bir dosyanın orijinal olarak X kodlamasıyla yazılmış olup olmadığını gerçekten otomatik olarak öğrenemezsiniz.
Kolayca yapabileceğiniz şey, tam bir dosyanın belirli bir kod çözücüyü kullanarak bir şekilde başarıyla çözülüp çözülmeyeceğini (ancak mutlaka doğru bir şekilde değil) doğrulamaktır. Belirli bir kodlama için geçerli olmayan baytlar bulursanız, başka bir şey olması gerekir.
Sorun birçok codec'in benzer olması ve aynı "geçerli bayt düzenlerine" sahip olması, onları sadece farklı karakterler olarak yorumlamalarıdır. Örneğin, bir ä
kodlama bir é
diğerine veya ø
üçte birine karşılık gelebilir . Bilgisayar, bayt yorumlamanın hangi yolla doğru bir şekilde okunabileceğini, insan tarafından okunabilir bir metinle sonuçlayamıyor (belki de her tür dil için bir sözlük eklerseniz ve yazım denetimi yapmasanız bile ...). Bazı karakter kümelerinin aslında başkalarının altkümeleri olduğunu da bilmelisiniz, örneğin, ASCII kodlaması, ANSI ailesinin veya UTF-8'in bir kısmı gibi en sık kullanılan kodeklerin bir parçasıdır. Bu, örneğin yalnızca latin karakterleri içeren UTF-8 olarak kaydedilen bir metnin ASCII olarak kaydedilen dosya ile aynı olacağı anlamına gelir.
Ancak, gerçekte yapabileceklerinize neler yapamayacağınızı açıklamaktan geri dönelim:
ASCII / ASCII olmayan (normalde UTF-8) metin dosyaları üzerinde temel bir kontrol için, file
komutu kullanabilirsiniz . Yine de pek çok kodek tanımıyor ve bir dosyanın yalnızca ilk birkaç KB'sini inceliyor; Öte yandan, çeşitli komut dosyaları, HTML / XML belgeleri ve birçok ikili veri formatı (metin dosyalarının karşılaştırılmasında ilgi çekici olmayan) gibi diğer ortak dosya türlerini de tanır ve son derece uzun satırlar olup olmadığı hakkında ek bilgiler yazdırabilir. newline dizisinin tipi (örneğin UNIX: LF, Windows: CR + LF).
$ 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
Bu yeterli değilse, bu cevap için yazdığım Python betiğini size sunabilirim; bu , tüm dosyaları tarar ve belirli bir karakter setini kullanarak çözmeye çalışır. Eğer başarılı olursa, bu kodlama potansiyel bir adaydır. Aksi halde, kodu çözülemeyen baytlar varsa, bu karakter kümesini listenizden kaldırabilirsiniz.
Adlı bir program file
bunu yapabilir. Örnek:
$ 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
Nasıl yapıldığıyla ilgileniyorsanız bakın src/encoding.c
.
file
bir tahminde bulunur ve sık sık çok iyi değil. Örneğin, testimde hem MacRoman hem de CP-1252'yi ISO-8859 olarak yanlış tanımladı, sonuç olarak "š" ve "ß" nin karıştırılmasıyla sonuçlandı.
.sql
dosya ve file
gerçekten bir olduğunu gözlerimi gösterdi gzip
sıkıştırılmış dosya!
piconv
kodlamayı değiştirmek için;)