Bir dosyanın kodlaması nasıl tespit edilir?

Dosya sistemimde (Windows 7) bazı metin dosyalarım var (Bunlar SQL betik dosyaları, eğer önemliyse).

Notepad++]1 ile açıldığında, "Encoding" menüsünde bazılarının "UCS-2 Little Endian" ve bazılarının "UTF-8 without BOM" kodlamasına sahip olduğu bildirilmektedir.

Buradaki fark nedir? Hepsi tamamen geçerli senaryolar gibi görünüyor. Notepad++ olmadan dosyanın hangi kodlamalara sahip olduğunu nasıl anlayabilirim?

Çözüm

Dosyalar genellikle kodlamalarını bir dosya başlığı ile belirtir. Birçok örnek vardır burada. Ancak, başlığı okusanız bile bir dosyanın gerçekten hangi kodlamayı kullandığından asla emin olamazsınız.

Örneğin, ilk üç baytı 0xEF,0xBB,0xBF olan bir dosya muhtemelen UTF-8 kodlu bir dosyadır. Ancak,  karakterleriyle başlayan bir ISO-8859-1 dosyası olabilir. Ya da tamamen farklı bir dosya türü olabilir.

Notepad++ bir dosyanın hangi kodlamayı kullandığını tahmin etmek için elinden geleni yapar ve çoğu zaman bunu doğru yapar. Yine de bazen yanlış yapar - bu yüzden 'Encoding' menüsü vardır, böylece en iyi tahminini geçersiz kılabilirsiniz.

Bahsettiğiniz iki kodlama için:

  • UCS-2 Little Endian" dosyaları UTF-16 dosyalarıdır (buradaki 2 bilgilerden anladığım kadarıyla), bu nedenle muhtemelen ilk 2 bayt olarak 0xFF,0xFE ile başlar. Anladığım kadarıyla, Notepad++ bunları "UCS-2" olarak tanımlıyor çünkü UTF-16'nın belirli yönlerini desteklemiyor.
  • BOM&quot olmadan "UTF-8" dosyalarında herhangi bir başlık baytı yoktur. Bu "BOM" olmadan" bitinin ne anlama geldiğini gösterir.
Yorumlar (10)

Yapamazsın. Eğer bunu yapabilseydiniz, bu kadar çok web sitesi veya "rastgele anlamsız" metin dosyası olmazdı. Bu yüzden kodlama genellikle meta veri olarak yük ile birlikte gönderilir.

Olmaması durumunda, yapabileceğiniz tek şey "akıllı bir tahmin" yapmaktır, ancak aynı bayt dizisi birkaç kodlamada geçerli olabileceğinden sonuç genellikle belirsizdir.

Yorumlar (4)