Metin dosyaları daha sonra kod çözme için kodlama yöntemini saklıyor mu?


19
  1. Bazı metin dosyaları kod çözme yöntemi daha sonra kod çözme için metin içeriği boyunca depolamak merak ediyordum?
  2. Yoksa belirli bir metin dosyasının kodlama yöntemini tahmin etmek metin görüntüleyicinin işi midir ve tahmin her zaman doğru olmayabilir mi? Evet ise, bir metin görüntüleyici bunu nasıl tahmin eder?

Düz metin dosyasıysa, kodlama hakkında hiçbir şey saklamaz. Yine de zengin metin için söyleyemem.
Wuffers

Evet, düz metin hakkında konuşuyorum.
Tim

Yanıtlar:


19

Bazı metin dosyaları kod çözme yöntemi daha sonra kod çözme için metin içeriği boyunca depolamak merak ediyordum?

Mark Szymanski'nin cevabı doğrudur - düz bir metin dosyasında açık bir kodlama bilgisi yoktur - bu "düz metin dosyası" tanımıdır, "düz", dosyada meta veri olmadığı gerçeğini ifade eder.

Ancak, bazı uygulamalar UTF-16 veya UTF-32 / UCS-4 olarak kodlanan metin dosyalarına bir bayt sırası işareti (BOM) yerleştirir. BOM gerçekten kodlamayı belirtmek için değildir (adın söylediği gibi bayt sırasını gösterir), ancak birçok uygulama UTF-16 / UTF-32'yi tanımak için BOM'un varlığını kullanır, bu nedenle bir kodlama göstergesi olarak hizmet eder.

Yoksa belirli bir metin dosyasının kodlama yöntemini tahmin etmek metin görüntüleyicinin işi midir ve tahmin her zaman doğru olmayabilir mi? Evet ise, bir metin görüntüleyici bunu nasıl tahmin eder?

Evet, metin görüntüleyici yalnızca tahmin edebilir. Genellikle bazı buluşsal yöntemler kullanır:

  • Bazı kodlamalarda (özellikle UTF-8'de) tüm bayt dizileri geçerli değildir. Yani bir uygulama dosyayı UTF-8 olarak çözmeyi deneyebilir. Başarılı olursa, dosya muhtemelen UTF-8'dir; geçersiz bir bayt dizisi bularak başarısız olursa, değildir. Örneğin vim, varsayılan olarak şu şekilde çalışır: Bir dosyayı okurken önce UTF-8'i kullanmaya çalışır; bu başarısız olursa, ISO-8859-1'e geri döner.
  • Çoğu eski 8-bit kodlamada, herhangi bir bayt sırası geçerlidir. Bu durumda, bazen bayt histogramına (farklı bayt / bayt dizilerinin sıklığı) bakarak kodlamayı tahmin edebilirsiniz. Internet Explorer bunu bir sayfanın kodlamasını "tahmin etmek" için kullanıyordu. Ancak, bu çok hataya açıktır, bu nedenle az sayıda program bunu yapar.

Çoğu durumda, bir programa bir metin dosyasının kodlamasının ne olduğu açık bir şekilde söylenmelidir, aksi takdirde dosyayı doğru okuyamaz.


Peki file -biBOM kullanılmazsa nasıl çalışır?
Old Geezer

@OldGeezer: filedosya türünü ve kodlamayı belirlemek için çeşitli buluşsal yöntemlere sahiptir. Çoğunlukla dosyadaki belirli dizeleri veya bayt dizilerini arar. Daha spesifik bilgi istiyorsanız, muhtemelen kaynağı okumalısınız. Veya sadece ayrı bir soru sorun :-).
sleske

@OldGeezer: Ve BTW, fileçoğu metin kodlamasını güvenilir bir şekilde algılayamaz (çünkü bu çok zordur). Kılavuz sayfasında karakter kümesi algılama hakkında bazı bilgiler bulunur - fileçoğunlukla yalnızca ASCII, UTF-8/16, EBCDIC ve ISO-8859-x'i tanır. Örneğin, KOI8-R ile kodlanan bir dosya "ISO-8859-1" olarak rapor edilir.
sleske

4

Düz metin dosyaları kodlamaları hakkında herhangi bir bilgi depolamaz. Bir görüntüleyici, ayarladığınız karakter kodlamasına göre belirler. Bilgisayar tarafından aynı olduğu için bunu kendi başına belirleyemez.


Böylece metin görüntüleyiciler metin dosyaları için kodlama yöntemleri arasında ayrım yapamazlar. Metin görüntüleyiciye bir nesne / yürütülebilir dosya verilirse, bunun bir metin dosyası olmadığını söyleyebilir mi?
Tim

Hayır, olamaz. Bir metin dosyası gibi açmaya çalışacaktır. Ve elbette bir sürü bozuk şey gösterecek. Kodlamaları birbirinden ayırt etmenin tek yolu, kodlamayı manuel olarak değiştirmektir.
Wuffers

@Tim: Çoğu metin görüntüleyici, bir şeyin metin dosyası olup olmadığını kontrol etmek için bir buluşsal yöntem kullanır. Dosyada yazdırılamayan çok sayıda karakter varsa, birçok izleyici ve düzenleyici uyarır (örneğin lessve grepUnix / Linux'ta bunu yapın).
sleske
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.