Les fichiers texte stockent-ils leur méthode de codage pour un décodage ultérieur?

19
  1. Je me demandais si certains fichiers texte stockent leur méthode de codage le long de leur contenu texte pour un décodage ultérieur?
  2. Ou est-ce le travail de la visionneuse de texte de deviner la méthode de codage pour un fichier texte donné, et la supposition peut ne pas toujours être correcte? Si oui, comment un lecteur de texte le devine-t-il?
Tim
la source
S'il s'agit d'un fichier en clair, il ne stocke rien sur l'encodage. Je ne peux pas dire pour le texte riche, cependant.
Wuffers
Oui, je parle de texte en clair.
Tim

Réponses:

19

Je me demandais si certains fichiers texte stockent leur méthode de codage le long de leur contenu texte pour un décodage ultérieur?

La réponse de Mark Szymanski est correcte - il n'y a pas d'informations de codage explicites dans un fichier texte brut - c'est la définition de "fichier texte brut", le "clair" se réfère au fait qu'il n'y a pas de métadonnées dans le fichier.

Cependant, certaines applications placent une marque d'ordre des octets (BOM) dans les fichiers texte encodés en UTF-16 ou UTF-32 / UCS-4. La nomenclature n'est pas vraiment destinée à indiquer l'encodage (elle indique l'ordre des octets, comme son nom l'indique), mais de nombreuses applications utiliseront la présence de la nomenclature pour reconnaître UTF-16 / UTF-32, elle sert donc d'indicateur de codage.

Ou est-ce le travail de la visionneuse de texte de deviner la méthode de codage pour un fichier texte donné, et la supposition peut ne pas toujours être correcte? Si oui, comment un lecteur de texte le devine-t-il?

Oui, la visionneuse de texte ne peut que deviner. Il utilise généralement des heuristiques:

  • Dans certains codages (notamment en UTF-8), toutes les séquences d'octets ne sont pas valides. Ainsi, une application peut simplement essayer de décoder le fichier en UTF-8. S'il réussit, le fichier est probablement UTF-8; s'il échoue en trouvant une séquence d'octets invalide, ce n'est pas le cas. Voici par exemple comment vimfonctionne par défaut: Il essaiera d'abord d'utiliser UTF-8 lors de la lecture d'un fichier; si cela échoue, il retombe à ISO-8859-1.
  • Dans la plupart des codages 8 bits plus anciens, toute séquence d'octets est valide. Dans ce cas, vous pouvez parfois deviner le codage en regardant l'histogramme d'octets (fréquence de différents octets / séquences d'octets). Internet Explorer faisait cela pour «deviner» l'encodage d'une page. Cependant, c'est très sujet aux erreurs, donc peu de programmes le font.

Dans la plupart des cas, un programme doit être explicitement informé de l'encodage d'un fichier texte, sinon il ne pourra pas le lire correctement.

sleske
la source
Alors, comment ça file -bimarche si la nomenclature n'est pas utilisée?
Old Geezer
@OldGeezer: filepossède diverses heuristiques pour déterminer le type de fichier et l'encodage. Généralement, il recherche certaines chaînes ou séquences d'octets dans le fichier. Si vous souhaitez des informations plus spécifiques, vous devrez probablement lire la source. Ou posez simplement une question distincte :-).
sleske
@OldGeezer: Et BTW, filene peut pas détecter de manière fiable la plupart des encodages de texte (car c'est très difficile). La page de manuel contient des informations sur la détection des jeux de caractères - la fileplupart du temps, elle ne reconnaît que ASCII, UTF-8/16, EBCDIC et ISO-8859-x. Par exemple, un fichier codé en KOI8-R est signalé comme "ISO-8859-1".
sleske
4

Les fichiers en texte brut ne stockent aucune information sur leur encodage. Une visionneuse le détermine en fonction du codage de caractères que vous lui avez défini. Il ne peut pas le déterminer par lui-même, car c'est la même chose pour l'ordinateur.

Wuffers
la source
Les visualiseurs de texte ne peuvent donc pas distinguer les méthodes de codage des fichiers texte. Si un visualiseur de texte reçoit un objet / fichier exécutable, pourra-t-il dire qu'il ne s'agit pas d'un fichier texte?
Tim
Non, ça ne peut pas. Il essaiera de l'ouvrir comme un fichier texte. Et bien sûr, affichera un tas de trucs brouillés. La seule façon de l'obtenir pour faire la distinction entre les encodages est de modifier manuellement l'encodage.
Wuffers
@Tim: La plupart des visualiseurs de texte utilisent une heuristique pour vérifier si quelque chose est un fichier texte. Si le fichier contient de nombreux caractères non imprimables, de nombreux téléspectateurs et éditeurs avertiront (par exemple lesset grepsur Unix / Linux, faites cela).
sleske