Bir dosyada hangi kodlamanın kullanıldığını nasıl görebilirim


23

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?


piconvkodlamayı değiştirmek için;)
Rinzwind 26:17

Evet. Kodlamayı zaten değiştirdim (1 dosyada). Ancak bunlardan birçoğuna sahibim ve hepsini kontrol edecek ve gerekirse gizleyecek küçük bir senaryo yapmak istedim. Ama sanırım hepsini dönüştürebiliyorum. Bazıları zaten UTF-8’de ise zarar verilmez. Sağ?
Standartdışı Model

Sorun değil hayır :) Sadece bir joker karakter kullanın
Rinzwind

Yanıtlar:


26

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, filekomutu 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.


ANSI, herhangi bir karakter kodlamasının adı değildir. Belki de ASCII karakter kodlaması ile ifade edilebilecek ANSI çıkış kodlarını düşünüyorsunuz.
kasperd

@ kasperd Büyük olasılıkla ISO 8859 veya Pencere kodu sayfası ailesinden birine atıfta bulunuyor. Kuzey amerikan pencere geliştiricileri için, ANSI kodlaması çoğu zaman tarihsel nedenlerle Windows 1252 kodlaması anlamına gelir.
user1937198

Evet, peki, ANSI temel olarak ASCII (0-127 kodları) artı yerel ayarlara özgü bir kod sayfası (kod 128-255). Yani haklısın ...
Byte Commander

Daha fazla bilgi: ANSI formatı nedir?
wjandrea

12

Adlı bir program filebunu 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.


2
Yine de tahmin edebilir .
hobbs

2
filebir 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ı.
Mark

Harika 👌! Benim eski doğru kodlamayı bulmak için birkaç saat geçirdi .sqldosya ve filegerçekten bir olduğunu gözlerimi gösterdi gzipsıkıştırılmış dosya!
Amirreza Nasiri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.