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 :

Détection format fichier


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Détection format fichier
    Bonjour

    j'ai un pb de détection de format de fichier. Je travaille en VC6.
    Un fichier txt encodé en utf-8 ans BOM est reconnu par Ultra Edit en "U8-DOS", par notepad++ en "ANSI as UTF-8". Lorsque je le visualise en hexa, il commence par "FF FE", or, quelque soit la méthode que j'utilise pour lire ce fichier, je n'arrive pas à voir ces caractères FF FE, je lis systématiquement les premiers caractères de texte.
    Quelqu'un aurait-il une idée ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Ouvrir en mode binaire?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Même ça ne marche pas :
    FILE* f;
    BYTE * bom = new BYTE[4];
    int n = 0;
    f = fopen(m_strFichier, "rb");
    bom[0] = fgetc(f);
    bom[1] = fgetc(f);
    delete [] bom;
    fclose(f);

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    peut tu donner un fichier comme exemple?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    D'après mes recherches, il s'agirait plutôt d'un codage UTF-16 LE
    J'ai joint le fichier
    Fichiers attachés Fichiers attachés

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    avec quoi visualise tu "FF FE" ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    N'importe quel éditeur hexa j'magine

    Ultraedit en l'occurence

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par YvesCa Voir le message
    N'importe quel éditeur hexa j'magine

    Ultraedit en l'occurence
    ...
    j'ai essayé avec hexedit et je n'ai pas ces caractère...

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bon j'ai réécrit ton fichier en UTf16 avec notepad++.
    Et j'avais bien FFFE.
    pour le lire j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    unsigned char entete[2] ={0};
    FILE* ff =fopen("c:/test1.txt","rb");
    fread(entete,2,1,ff);
    Mais en C++ tu devrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    unsigned char entete[2] ={0};
    std::ifstream ff("c:/test1.txt",std::ios::binary);
    ff.read(reinterpret_cast<char*>(entete),2);
    Il fallait donc juste l'ouvrir en binaire comme le disait zais_ethael

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    ...
    j'ai essayé avec hexedit et je n'ai pas ces caractère...
    Comme quoi, j'ai trop d'imagination des fois ....

    Citation Envoyé par Mongaulois Voir le message
    Bon j'ai réécrit ton fichier en UTf16 avec notepad++.
    Désolé, je ne peux pas me permettre de convertir les fichiers, je ne les maitrise pas, ils arrivent et je dois les traiter .....
    C'est justement pour cela que je dois détecter leur format, car il peut être différent.

    Citation Envoyé par Mongaulois Voir le message
    Il fallait donc juste l'ouvrir en binaire comme le disait zais_ethael
    C'est ce que j'ai fait :
    Citation Envoyé par YvesCa Voir le message
    f = fopen(m_strFichier, "rb");
    "rb" veut dire en mode read et en binaire

    De plus, si je convertis préalablement le fichier, je n'ai effectivement plus aucun problème.
    Là, en fait le problème est : comment détecter un fichier en UTF-8 sans BOM ?

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    http://www.codeguru.com/cpp/misc/mis...le.php/c10451/
    Pour le savoir sans BOM, je pense que tu doit faire une première passe et vérifier que les octet on le poids le plus fort a 0
    un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool Unicode(const char & c)
    {
    return c & 0x80;
    }

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Je ne sais pas pourquoi, mais l'exemple que j'avais téléchargé s'obstine à rester en ASCII.
    J'ai refait des exemples testé et vérifiés.
    Dans les deux cas, c & 0x80 me retourne 0.
    Je continue mes recherches sur codeguru .....
    Fichiers attachés Fichiers attachés

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    J'ai oublié. Un fichier ascii s'ecrit pareil en UTF-8. Dsl j'ai plus la page internet.
    Donc normale que tu ne le voit pas....
    Un text normale sera lu de la même manière

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Je l'ai lu aussi.

    Pourtant, il doit bien y avoir une méthode : UltraEdit et Notepad++ détectent bien un changement de format (c'est affiché dans la barre d'état).
    De plus, en hexa, les fichiers sont différents :
    En ascii chaque caractère est sur un byte
    En utf8 chaque caractère est sur deux byte, le 2e byte étant systématiquement à 00.

  15. #15
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par YvesCa Voir le message
    En utf8 chaque caractère est sur deux byte, le 2e byte étant systématiquement à 00.
    ben non justement.
    si le poids le plus fort est a 0, le caractère est sur 8 bits (ca j'en suis presque sur). Sinon sur 16 (ca pas trop)

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Moi, c'est ce que je vois sur ultraedit en hexa, quand je compare les deux fichiers.
    Et toi, avec hexedit, tu le vois comment test1.UTF8.txt ?

  17. #17
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    j'ai juste une différence pour les caractère âêîôëä
    ascii : E2 EA EE F4 EB E4
    UTF 8 : C3A2 C3AA C3Ae C3B4 C3AB C3A4

    tiens si tu décode C3A2 ca donne E2... lol

    A mon avis le seul moyen est de voir si il existe d'une autre série d'octet consecutive que :
    0xxxxxxx
    110xxxxx 10xxxxxx
    1110xxxx 10xxxxxx 10xxxxxx
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

  18. #18
    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
    Attention avec UltraEdit: Si on ne lui dit pas spécifiquement d'éditer du texte UTF-8 en tant qu'UTF-8, il le garde en mémoire sous forme UTF-16 (plus pratique pour l'édition), donc il affiche de l'UTF-16 quand on passe en hexa. C'est un "gotcha" connu de UltraEdit, assez déroutant au premier abord.

    Donc, c'est hexedit qui "a raison".
    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.

Discussions similaires

  1. [OS] I tunes - format fichier
    Par Pascal26 dans le forum Apple
    Réponses: 12
    Dernier message: 16/12/2007, 17h56
  2. Formater fichier excel avec Access
    Par subnox dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/08/2007, 14h11
  3. formats fichiers Excel XML Open XML
    Par arkhamon dans le forum Excel
    Réponses: 2
    Dernier message: 25/05/2007, 21h55
  4. [Oracle 10g] Pbs de format fichiers UTF8
    Par fguigui dans le forum Administration
    Réponses: 2
    Dernier message: 23/04/2007, 16h15
  5. formats fichiers (ms3d,bsp,md2,3ds,x)
    Par Husqvarna dans le forum Moteurs 3D
    Réponses: 5
    Dernier message: 22/05/2006, 04h50

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