I file di testo memorizzano il loro metodo di codifica per la decodifica successiva?


19
  1. Mi chiedevo se alcuni file di testo memorizzano il loro metodo di codifica lungo il loro contenuto di testo per la successiva decodifica?
  2. Oppure è compito del visualizzatore di testi indovinare il metodo di codifica per un determinato file di testo e le ipotesi potrebbero non essere sempre corrette? Se sì, come può indovinarlo un visualizzatore di testi?

Se è un file di testo semplice, non memorizza nulla sulla codifica. Non posso dire per il rich text, però.
Wuffers,

Sì, sto parlando di testo in chiaro.
Tim

Risposte:


19

Mi chiedevo se alcuni file di testo memorizzano il loro metodo di codifica lungo il loro contenuto di testo per la successiva decodifica?

La risposta di Mark Szymanski è corretta - non ci sono informazioni di codifica esplicite in un file di testo semplice - questa è la definizione di "file di testo semplice", il "semplice" si riferisce al fatto che non ci sono metadati nel file.

Tuttavia, alcune applicazioni inseriranno un segno di ordine dei byte (BOM) nei file di testo codificati come UTF-16 o UTF-32 / UCS-4. La BOM non intende realmente indicare la codifica (indica l'ordine dei byte, come dice il nome), ma molte applicazioni useranno la presenza della BOM per riconoscere UTF-16 / UTF-32, quindi funge da indicatore di codifica.

Oppure è compito del visualizzatore di testi indovinare il metodo di codifica per un determinato file di testo e le ipotesi potrebbero non essere sempre corrette? Se sì, come può indovinarlo un visualizzatore di testi?

Sì, il visualizzatore di testo può solo indovinare. Di solito utilizza alcune euristiche:

  • In alcune codifiche (in particolare in UTF-8) non tutte le sequenze di byte sono valide. Quindi un'applicazione può semplicemente provare a decodificare il file come UTF-8. Se riesce, il file è probabilmente UTF-8; se fallisce trovando una sequenza di byte non valida, non lo è. Ecco come ad esempio vimfunziona per impostazione predefinita: proverà innanzitutto a utilizzare UTF-8 durante la lettura di un file; se ciò fallisce, ricade in ISO-8859-1.
  • Nella maggior parte delle codifiche a 8 bit precedenti, qualsiasi sequenza di byte è valida. In tal caso, a volte puoi indovinare la codifica osservando l'istogramma dei byte (frequenza di diversi byte / sequenze di byte). Internet Explorer lo faceva per "indovinare" la codifica di una pagina. Tuttavia, questo è molto soggetto a errori, quindi pochi programmi lo fanno.

Nella maggior parte dei casi, un programma deve essere esplicitamente informato su quale sia la codifica di un file di testo, altrimenti non sarà in grado di leggerlo correttamente.


Quindi, come file -bifunziona se la BOM non viene utilizzata?
Old Geezer,

@OldGeezer: fileha varie euristiche per determinare il tipo di file e la codifica. Principalmente, cerca determinate stringhe o sequenze di byte nel file. Se desideri informazioni più specifiche, probabilmente dovrai leggere la fonte. O semplicemente fai una domanda separata :-).
sleske,

@OldGeezer: E a proposito, filenon è possibile rilevare in modo affidabile la maggior parte delle codifiche di testo (perché è molto difficile). La pagina man contiene alcune informazioni sul rilevamento del set di caratteri - per filelo più riconosce solo ASCII, UTF-8/16, EBCDIC e ISO-8859-x. Ad esempio, un file codificato in KOI8-R è riportato come "ISO-8859-1".
sleske,

4

I file di testo normale non memorizzano alcuna informazione sulla loro codifica. Un visualizzatore lo determina in base alla codifica dei caratteri che hai impostato per esso. Non può determinarlo da solo, poiché è lo stesso per il computer.


Quindi i visualizzatori di testo non possono distinguere tra i metodi di codifica per i file di testo. Se a un visualizzatore di testo viene assegnato un oggetto / file eseguibile, sarà in grado di dire che non è un file di testo?
Tim

No, non può. Tenterà di aprirlo come un file di testo. E ovviamente mostrerà un mucchio di cose confuse. L'unico modo per ottenere la distinzione tra codifiche è se si modifica manualmente la codifica.
Wuffers,

@Tim: la maggior parte dei visualizzatori di testi usa un'euristica per verificare se qualcosa è un file di testo. Se il file ha molti caratteri non stampabili, molti spettatori e gli editori potranno mettere in guardia (ad esempio, lesse grepsu Unix / Linux farlo).
sleske,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.