Partage
  • Partager sur Facebook
  • Partager sur Twitter

caractère accentués (lecture et stockage)

IDE Eclipse

Sujet résolu
    19 décembre 2018 à 19:11:52

    Bonjour à tous,

    J'essaie de faire une machine à inventer des mots.

    Pour faire ça, je dois analyser l'organisation des mots dans la langue française. et donc lire et stocker des lettres.

    Mais je n'arrive pas à utiliser les caractères accentués dans eclipse.

    Merci pour votre aide, je débute.

    • Partager sur Facebook
    • Partager sur Twitter
      20 décembre 2018 à 16:03:48

      Bonjour,

      C'est vague comme explication...Si les caractères accentués s'affichent dans ton éditeur de texte (notepad), alors elle devrait s'afficher dans Eclipse.

      Si cela concerne la lecture et l'écriture en fichier, le problème vient probablement de l'encodage utilisé (UTF-8, CP-1252, ..etc..).

      • Partager sur Facebook
      • Partager sur Twitter
      Les seules questions bêtes sont celles qui ne sont pas posées. Mieux vaut paraître bête une fois que de le rester à vie."Vis comme si tu devais mourir demain. Apprends comme si tu devais vivre toujours."
        21 décembre 2018 à 12:58:06

        Salutation CeBIM,

        Effectivement, c'est un peu vague.. pourtant moi je vois très bien ce que je veux dire ;)

        -> Je n'ai aucun souci pour afficher les caractères dans éclipse lorsque j'écris. voir PJ

        -> Je peux même faire un "cout" en lui demandant d'afficher des accents -> ça affiche !

        Mais si je demande de saisir une lettre et que l'on met un "é", ça stocke en erreur ou ça affiche l'erreur (voir PJ)

        Je te remercie,

        Désolé de ne pas avoir été très clair initialement...

        • Partager sur Facebook
        • Partager sur Twitter
          21 décembre 2018 à 13:08:02

          Salut,

          Malheureusement pour toi, char est un type qui ne permet de stocker que la table ASCII. Et le é n'en fait pas parti. D'ailleurs petite chose qui pourrait te surprendre, la chaîne de caractère "é" comporte un caractère, mais 2 octets. Et oui, enfin en UTF-8 du moins (mais que tout le monde doit utiliser sous peine d'être brûlé vif).

          Pour ton problème, le plus simple est de lire des chaînes entière (std::getline par exemple). Si tu dois vraiment passer par du caractère par caractère; alors tu dois empiler les caractères dans une std::string pour l'afficher. Quand tu tape é<entrée> dans stdin tu n'aura pas un caractère, mais deux.

          Démonstration :

          #include <iostream>
          
          int main()
          {
              char ch;
          
              while (std::cin >> ch)
                  std::cout << (int)ch << std::endl;
          }

          Et à l'exécution

          $ ./a.out
          é
          -61
          -87
          




          -
          Edité par markand 21 décembre 2018 à 13:12:38

          • Partager sur Facebook
          • Partager sur Twitter

          git is great because Linus did it, mercurial is better because he didn't.

            21 décembre 2018 à 13:41:49

            @markand : Et les "extended ASCII Codes" ? C'est possible de les utiliser ? Je ne sais pas...




            -
            Edité par CeBiM 21 décembre 2018 à 13:50:21

            • Partager sur Facebook
            • Partager sur Twitter
            Les seules questions bêtes sont celles qui ne sont pas posées. Mieux vaut paraître bête une fois que de le rester à vie."Vis comme si tu devais mourir demain. Apprends comme si tu devais vivre toujours."
              21 décembre 2018 à 16:52:24

              Salut,

              CeBiM a écrit:

              @markand : Et les "extended ASCII Codes" ? C'est possible de les utiliser ? Je ne sais pas...

              Tout est possible... cela ne veut malheureusement pas dire que tout soit intéressant!!!

              L'utilisation des code ASCII étendus font -- malheureusement -- partie de ce qu'il est possible mais pas intéressant de faire :P  Je m'explique:

              L'utilisation des codes ASCII étendus est basée sur ce que l'on désigne couramment le code page.  En simplifiant très fort, nous pourrions dire que c'est un code spécifique à une région du monde particulière qui permet de choisir les symboles "les plus adéquats" qui seront affichés.

              Dans les zones francophones, les caractères les plus adéquats seront nos lettre accentuées (à, é, è, ù, â, ê, î, ô û etc) mais, si on utilise un autre code page, les symboles affichés seront totalement différents :p

              Pire encore, il se peut tout à faiit que, le code page utilisé au Québec, par exemple ait inversé la position de certains caractères accentués (dans la table ASCII) par rapport au code page utilisé en France. (je crois d'ailleurs que c'est le cas de pas mal de symboles).

              Si bien que, si tu utilises les codes étendus, tu deviens tout à fait dépendant du code page sur lequel tu te base pour déterminer le code qui t'intéresse.

              C'est d'ailleurs l'un des problèmes majeurs que l'on éprouve régulièrement sous windows : le code page utilisé pour la sauvegarde des sources ne correspond pas forcément au code page utilisé par la ligne de commande, si bien que l'affichage provoque l'apparition d'un Ü là où l'on s'attendait à voir apparaitre un à (par exemple).  C'est ballot, hein?

              • Partager sur Facebook
              • Partager sur Twitter
              Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                22 décembre 2018 à 22:38:09

                markand a écrit:

                Si tu dois vraiment passer par du caractère par caractère; alors tu dois empiler les caractères dans une std::string pour l'afficher.


                Salut à tous, Ok, je comprends pourquoi mon char ne me renvoie pas ce qu'il me faut.
                Donc, je vais essayer de lire caractère par caractère, mais de les stocker dans un string...
                si j'ai bien compris ;)

                Effectivement, en stockant dans un string ça marche... :)

                Merci à tous pour l'info et le conseils !

                -
                Edité par Seb_Eistien 22 décembre 2018 à 22:48:46

                • Partager sur Facebook
                • Partager sur Twitter
                  25 décembre 2018 à 10:04:33

                  Par contre lorsque les opérateur de flux opèrent sur des chaînes de caractère, cela s'arrête au prochain espace. Il faudra donc utiliser std::skipws ou std::getline à la place.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  git is great because Linus did it, mercurial is better because he didn't.

                    16 janvier 2019 à 11:22:48

                    Yes, tout à fait.

                    Comme je lis des mots de "dictionnaire", cela ne me pose pas de problème, mais tu as raison de préciser.

                    Merci

                    • Partager sur Facebook
                    • Partager sur Twitter

                    caractère accentués (lecture et stockage)

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown