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 :

Caracteres ASCII étendu ANSI sur une FAT16


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut Caracteres ASCII étendu ANSI sur une FAT16
    Bonjour le forum


    Je suis en train d"ecrire une librairire de gestion d'une FAT16 en C pour un microcontroleur PIC 18F. Mon compilo est donc MBLAB C18.


    Je suis face a un probleme qui ne trouve pas de réponse. J'ai créé un fichier test nommé : "sébètà.txt" que j'ai mis sur ma partition FAT16.

    Lorsque je vais lire l'entrée correspondante a ce fichier sur ma partition j'obtiens les codes héxa suivants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Nom fichier:        S              B       Ô       T       ·
    Code ASCII FAT      0x53    0x90    0x42    0xD4    0x54    0xB7

    Le fichier a été nommé comme ceci avant transfert sur ma partition FAT16:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Nom fichier:        S       é       B       è       T       à
    Code ASCII ANSI     0x53    0xE9    0x42    0xE8    0x54    0xE0
    Je ne comprends pas quelle méthode a utilisé Windows pour passer du code ASCII étendu ANSI au code ASCII DOS étendu OEM:

    0xE9 transformé en 0x90
    0xE8 en 0xD4
    0xE0 en 0xB7

    Si vous avez une idée, ou un lien a me conseiller ou je pourrais trouver ces infos?

    J'ai le white paper de µcro$oft, mais rien n'est indiqué a ce sujet (seuls les caracteres dont le code ASCII est inferieur a 0x80 sont sujets à explications)

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bizarre en effet...
    Cela semble ne pas être une simple conversion CP1252->IBM850...
    Avec ce simple code sous Windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	char nom[] = "sébètà.txt";
    	char nom2[ARRAYSIZE(nom)];
    	CharToOemBuffA(nom, nom2, ARRAYSIZE(nom)-1);
    	nom2[ARRAYSIZE(nom2)-1] = '\0';
    J'ai cette séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s   ‚   b   Š   t   …   .   t   x   t
    73  82  62  8a  74  85  2e  74  78  74
    Mais peut-être qu'avec une autre page de codes OEM, ça correspond...
    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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Est ce que tu penses que ca pourrait venir du fait que j'ai créé ce fichier sur mon DD (ntfs) puis transferé sur ma carte SD formatée en FAT16?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Eh bien, c'est clairement lié au changement.
    Mais la différence de valeurs hexa des caractères montre que le nom a été converti, mais de là à savoir vers quelle page de codes...
    (le résultat est le même sur les pages 850 et 437, les deux plus populaires. Il faudrait chercher une page de codes dont le 'é' a la valeur 0x82...)

    (Sachant qu'à la base, il me semble que les noms sont stockés en UTF-16 en NTFS).
    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.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    okkééééé

    Bon je vais essayé de créer un fichier direct sur ma SD pour voir la différence

    Merci de ton aide

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Pour info: je viens de tester avec notepad en créant un fichier txt direct sur ma SDcard depuis mon PDA en le nommant avec des caracteres étendus, j'obtiens la meme conversion de caracteres incompréhensible.

    Je vais abandonner la partie étendu et me focaliser sur la table ASCII limitée aux caracteres 0x00 -> 0x7F.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Marmoccelle Voir le message
    Je suis en train d"ecrire une librairire de gestion d'une FAT16 en C pour un microcontroleur PIC 18F. Mon compilo est donc MBLAB C18.

    Je suis face a un probleme qui ne trouve pas de réponse. J'ai créé un fichier test nommé : "sébètà.txt" que j'ai mis sur ma partition FAT16.
    A ma connaissance, on a pas le droit d'utiliser les caractères > 127 (0x7F) en FAT16 (et certains caractères sont réservés, comme '.', '\', '+', '?' etc.)
    J'ai le white paper de µcro$oft, mais rien n'est indiqué a ce sujet (seuls les caracteres dont le code ASCII est inferieur a 0x80 sont sujets à explications)
    si en plus tu le sais...

    Rien de ceci n'a à voir avec le langage C.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    A ma connaissance, on a pas le droit d'utiliser les caractères > 127 (0x7F) en FAT16 (et certains caractères sont réservés, comme '.', '\', '+', '?' etc.)

    si en plus tu le sais...

    Rien de ceci n'a à voir avec le langage C.
    Oui mais ce que je ne sais pas, d'ou la question posée, c'est comment le pilote FAT16 de windows interprete ces fameux caracteres avant de sauvegarder/renommer dans la partition un nom de fichier integrant ces caracteres. Puisque lorsque je nomme mon fichier avec ces caracteres etendu je n'ai pas le message d'erreur comme quoi ce sont des caracteres interdit comme c'est le cas lorsqu'on tente de nommer un fichier avec des '\' '.' etc...

    Je ne savais pas trop dans quel forum poser ma question, si ce n'est pas le bon je te laisse le soin de choisir la section appropriée.

    Merci

Discussions similaires

  1. caractere ASCII et unicode sur une seul ligne
    Par vincent.mbg dans le forum Général Python
    Réponses: 6
    Dernier message: 16/04/2009, 12h06
  2. fonction replaceFirst sur une chaine de caractere
    Par marcxa44 dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2007, 13h22
  3. [MySQL] Clause WHERE sur une liste et jeu de caractère
    Par napz dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/10/2006, 13h03
  4. Conditions sur une chaine de caractères
    Par xenos dans le forum Delphi
    Réponses: 2
    Dernier message: 21/05/2006, 22h56
  5. fread sur une chaine de caractere ?
    Par Battosaiii dans le forum C
    Réponses: 17
    Dernier message: 18/03/2006, 12h50

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