IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Un format de fichier texte, c'est quoi?


Sujet :

C++

  1. #1
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut Un format de fichier texte, c'est quoi?
    Bonjour tout le monde.
    J'espère que je ne pose pas une question triviale. Mais je vous assure que j'ai chercher (certainement mal). Je poste aussi dans le forum C++, car j'ai du mal à trouvé ou poser cette question.
    Quand on ouvre un fichier .txt, l'éditeur sait automatiquement qu'il est au format ASCII ou UTF. Comment ça se fait? Je parle au niveau physique. Y a t il un entête dans le fichier? Si oui pourquoi n'est il pas comptabilisé dans la taille du fichier. Serait-ce gérer par le système de fichier?
    Merci d'avance.

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    UTF-8 est backward compatible avec ASCII. Les unités de codage sont de simples words de 8 bits (octets). Le range ASCII 0x00-0x7F est encodé tel quel avec UTF-8. Les caractères en dehors de ASCII seront codés avec une séquence de 2 à 4 octets. Les bits prépondérants du premiers octets vont indiquer combien d'octets sont nécessaires pour coder le caractère:
    0 -> 1 octet
    110 -> 2 octets dans la séquence
    1110 -> 3 octets
    11110 -> 4 octets
    On remarque que c'est indépendant d'une convention d'endianness
    Un éditeur text (ou n'importe quel prog) qui est UTF-8 aware va savoir comment gérer la chaîne d'octets qu'on lui donne.

    C'est moins le cas pour UTF-16 ou 32. Là, les words sont de 16 ou 32 bits.
    Alors qu'en UTF-8 un caractère est codé sur 1 à 4 octets, on en aura 2 ou 4 pour UTF-16 et toujours 4 pour UTF-32. On se retrouve avec des 0x00 insérés pour avoir le bon padding de 2 ou 4 octets. De plus, ça dépend de l'endianness (big endian ou little endian). C'est pourquoi UTF-16 ou 32 sont rarement utilisés en dehors des mécanismes particuliers d'une application (UTF-16 est utilisé en interne par pas mal de systèmes: Windows, Qt, python, libxml..)
    Le fameux BOM (Byte-order mark) vient pallier à ce problème d'endianness pour les fichiers texts: c'est le caractère unicode U+FEFF inséré en tout début de chaîne (fichier) et qui, selon son codage, indiquera si on est en big ou little endian. par exemple en UTF-32:
    00 00 FE FF -> big endian
    FF FE 00 00 -> little endian
    Donc quelque part, le BOM sert d'entête dans le fichier. Surtout sous Windows d'ailleurs (regarde avec notepad) parceque les systèmes POSIX préfèrent manipuler du UTF-8: c'est compatible avec ASCII, y a pas besoins de BOM, ça marche bien (pas de 0x00 intempestifs) et ça prend moins de place en moyenne pour un range ASCII-latin.

    ref
    http://www.unicode.org/faq/utf_bom.html
    http://www.cl.cam.ac.uk/~mgk25/unicode.html
    http://en.wikipedia.org/wiki/UTF-8 (et tous les liens internes)

    PS: l'utilisateur loufoque sur ce forum saura bien mieux répondre que moi à toute cette machinerie unicode

  3. #3
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Merci beaucoup metagoto pour la réponse.
    Maintenant si j'enregistre un fichier UTF, et que je l'ouvre à nouveau, l'éditeur va essayer de voir si le code ressemble à de l'UTF ou de l'ASCII. C'est ça?
    Mais si c'est cela, si le document est écrit entièrement avec des caractères codés sur 8 bits, ça sera codé comme de l'ASCII, comment l'éditeur fera t il la différence?
    Encore merci

  4. #4
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Si tous les bytes (octets) sont dans le range 0x00 et 0x7f, alors il n'y a pas de différences: c'est ascii et utf-8 à la fois.
    La où ça devient intéressant c'est qu'il y a des séquences de bytes qui ne peuvent jamais être du utf-8 valide. En effet, si je reprends l'exemple d'une séquence utf-8 de 3 bytes. Le premier:
    1110 -> indique le début d'une séquence de 3 bytes
    Les 2 bytes suivants commencent toujours par 10. C'est aussi valable pour les autres séquences (2 ou 4 bytes).
    On ne peut donc pas avoir, par exemple:
    1110xxxx 0xxxxxxx 1111111x
    Donc là un éditeur text il fait quoi ? Y a des chances qu'il se rabatte sur de l'iso-8859-N (latin1 etc) où tout le range 0x00-0xff est utilisé, mais où tous les caractères sont codés sur un seul byte.

    Les navigateurs web par exemple, en l'absence de header content-type vont essayer de deviner l'encoding utilisé en regardant les séquences qui commencent par un 8th bit à 1.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Évidemment, parfois, l'éditeur se trompe en cherchant des correspondances.

    En effet, un texte en pur ASCII et un fichier UTF-16 sans BOM peuvent tout-à-fait avoir la même représentation, alors il faut deviner, avec des heuristiques.

    Et quand l'heuristique se trompe, ça mène à des problèmes comme le fameux Bush hid the facts.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Merci beaucoup à vous, vous répondez totalement à ma question.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. format du fichier texte et FtpConnection
    Par marcandre dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 25/05/2009, 10h37
  2. formater un fichier texte avec texte+nombres
    Par nagrom60 dans le forum MATLAB
    Réponses: 1
    Dernier message: 27/02/2009, 11h18
  3. [VB6] Format de fichier texte Unicode
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 07/04/2006, 09h10
  4. Réponses: 9
    Dernier message: 16/12/2005, 15h46
  5. format de fichier texte
    Par locutus33 dans le forum Access
    Réponses: 3
    Dernier message: 18/10/2005, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo