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 :

Chaine de caractère ASCII et 'é'


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut Chaine de caractère ASCII et 'é'
    Bonsoir,

    J'ai un problème avec une chaine de caractère lus dans un fichier .utf8.

    J'ai un fichier texte qui contient des noms, je le lis grâce à la fonction fgets, je stock alors cette chaine de caractère dans un champ d'une structure grâce à la fonction strdup.
    Ensuite je souhaite remplir une sorte d'arbre lexicographique avec tous les noms que j'ai lu dans le fichier.
    Pour cela, j'ai créé un structure nœud qui contient une valeur et un tableau de 26 pointeur vers la structure nœud.
    Pour remplir cette arbre je parcours la chaine de caractère et je transforme chaque lettre en un entier variant de 0 à 25 pour accéder à chaque case de mon tableau de pointeur. Voici le code de cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int chartoi(char c)
    {
      int i;
      i=(int)(tolower(c)-'a');
      if(i>=0 && i<26)
      {
        return i;
      }
      else
      {
        return -1;
      }
    }
    Or dans certaines chaine de caractère que j'ai stocké, il y a des 'é' et autres caractères accentués et quand il passe par ma fonction retourne -1.
    Par exemple pour le 'é' c "vaut" -61.
    Comment cela est-il possible vu que un char est codé sur 1 octet et que la table ASCII ne contient pas de 'é'. Pourtant quand j'affiche la chaine de caractère avec gdb, le é est bien affiché.
    Peut-être cela vient-il du faite que le fichier texte soit codé en utf8?

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si tu veux gérer les lettres accentuées, il va falloir les recoder au début de ta fonction. Je te suggérerais un switch, ce n'est pas très élégant, mais c'est facile à lire et à mettre au point

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char d=c;
    switch(c) {
       case 'é':
       case 'è':
       case 'ê': d='e';break;
       case 'à' : d='a';break;
     
    }
    Maintenant, tout ceci suppose que tes caractères sont ascii. Si tu lis des données utf8, cela ne marchera pas, car les lettres accentuées y sont codées sur 2 caractères ou plus (le premier ayant un bit de poids fort à 1, ce qui correspond à un char négatif (ou supérieur à 127 si tu l'interprête comme un unsigned char.

    Donc, en utf8, tu ne peux pas lire tes caractères un par un... Il faut quand tu lis un caractère dans le fichier regarder s'il est <=127 et non négatif.

    Si oui, c'est un ascii, tu fais comme avant.
    Si non, c'est le premier caractère d'un utf8, il va te falloir le traiter comme tel.
    A ce stade, tu devrais lire ceci: http://fr.wikipedia.org/wiki/UTF-8

    Francois

Discussions similaires

  1. code ascii :controle d'une chaine de caractère
    Par oliv27400 dans le forum MATLAB
    Réponses: 2
    Dernier message: 24/07/2013, 11h47
  2. Extraire des caractères ascii d'un chaine
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 5
    Dernier message: 28/11/2008, 11h35
  3. Convertir chaine de caractère en suite de codes ASCII
    Par mixka13 dans le forum Débuter
    Réponses: 7
    Dernier message: 20/11/2008, 17h05
  4. Comment afficher une chaine de caractère en ascii
    Par nandofive dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/01/2008, 13h11
  5. Fonction sur chaine de caractère (ASCII)
    Par Medmidou dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 25/05/2007, 01h40

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