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 :

Code ASCII et manipulation des caractères


Sujet :

C++

  1. #1
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut Code ASCII et manipulation des caractères
    Bonjour.
    J'essai de manipuler les charactères avec leur code Ascii étendu.
    Mais ça ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    int valeurAsccii;
    char caractere; 
    valeurAsccii = caractere;
     
            if (valeurAsccii >= 131 && valeurAsccii<=134) {caractere = 'a';}
     
            if (valeurAsccii >= 192 && valeurAsccii<=197) {caractere = 'a';}
     
            if (valeurAsccii >= 224 && valeurAsccii<=229) {caractere = 'a';}
     
     
     
            if (valeurAsccii == 199 || valeurAsccii == 231) {caractere = 'c';}
     
     
     
            if (valeurAsccii == 144) {caractere = 'e';}
     
            if (valeurAsccii >= 136 && valeurAsccii <= 138) {caractere = 'e';}
     
            if (valeurAsccii >= 200 && valeurAsccii <= 203) {caractere = 'e';}
     
            if (valeurAsccii >= 232 && valeurAsccii <=235) {caractere = 'e';}
     
            if (valeurAsccii == 130) {caractere = 'e';}
     
     
     
            if (valeurAsccii >= 139 && valeurAsccii <= 141) {caractere = 'i';}
     
            if (valeurAsccii >= 204 && valeurAsccii <= 207) {caractere = 'i';}
     
            if (valeurAsccii >= 236 && valeurAsccii <= 239) {caractere = 'i';}
     
     
            if (valeurAsccii == 153) {caractere = 'o';}
     
            if (valeurAsccii >= 210 && valeurAsccii <= 214) {caractere = 'o';}
     
            if (valeurAsccii >= 242 && valeurAsccii <=246) {caractere = 'o';}
     
     
     
            if (valeurAsccii >= 217 && valeurAsccii <= 220) {caractere = 'u';}
     
            if (valeurAsccii >= 249 && valeurAsccii <= 252) {caractere = 'u';}
     
     
            cout<<caractere;
    Je souhaite remplacer les caractères accuentués par leur minuscules.
    Merci.

  2. #2
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Apres tests je crois que je n'ai pas les bonnes valeur asccii.
    Je me trompe de table. pour é => 87
    pour è => 88
    Merci de me dire quelle table à laquelle je dois compter.
    ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    valeurAsccii = caractere;
    if (valeurAsccii == 87 ) {caractere = 'e';};
    		if (valeurAsccii == 88 ) {caractere = 'e';};
     
    		cout<<caractere;
    pour éè rien ne change ça affiche éè ???

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 751
    Par défaut
    Ce n'est pas de l'ASCII

    En gros, l'ASCII c'est seulement 128 valeurs, soit 7 bits sur 1 octet.

    Toi, tu utilises le MBCS (Multibyte Character Sets) ou plus communément appelé "code page" : en gros ce sont des tables qui remplissent les 128 autres valeurs.
    Certains "code pages" sont sur 16 bits : Shift-JIS par exemple.
    Les + connus sont le Latin-1 et le Latin-9. ANSI c'est le "code page" de Windows de la langue par défaut, et varie d'1 pays à 1 autre.

    Le problème c'est qu'il faut savoir quel "code page" tu utilises : code page, lien Wikipédia en anglais

    Pour palier tout cela, l'Unicode a été inventé : UTF-8, UTF-16 ou UTF-32. C'est tout autant le chantier

    En C et C++, la librairie standard travaille qu'en ASCII : documentation cplusplus.con <cstring> (string.h) en anglais
    Pour l'Unicode il y a le type wchar_t et <cwchar> (wchar.h).
    Tout le reste ce fait avec des bibliothèques externes

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 752
    Par défaut
    Citation Envoyé par foetus Voir le message
    En C et C++, la librairie standard travaille qu'en ASCII : documentation cplusplus.con <cstring> (string.h) en anglais
    En réalité pas du tout. La majorité des fonctions de <cstring> travaillent sur des octets sans prendre en considération un quelconque encodage. Seules quelques-unes utilisent la locale (strcoll et strxfmt) et ne sont pas limité à l'ASCII. D'ailleurs, sur Linux, les locales sont généralement basées sur de l'utf-8. Par contre avec <cctype>, il n'y a pas de garanti que cela fonctionne avec de l'Unicode puisque la norme C indique que les fonctions doivent prendre un caractère représentable dans un unsigned char ou égale à EOF (la glibc de Linux le support, sur Windows ça va moins bien se passer).

    Citation Envoyé par foetus Voir le message
    Pour l'Unicode il y a le type wchar_t et <cwchar> (wchar.h).
    C'est pas terrible comme type étant donné que la taille dépend de la plateforme: 4 octets sur Linux et Mac, 2 octets sur Windows. Du point de vue de Windows, Unicode = utf-16 (historique ce n'était pas de l'utf-16, mais c'est compatible). Sauf que utf-16 est un encodage multi-bytes et on ne peut même pas représenter tous les caractères avec un simple wchar_t... Le mieux reste d'utiliser uint32_t ou char32_t pour faire de l'utf-32 / Unicode et considérer que toutes les fonctions manipulant des wchar_t vont mal fonctionner à un certain moment.

    C'est toujours une grosse galère les encodages

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Citation Envoyé par Philcmoi Voir le message
    Apres tests je crois que je n'ai pas les bonnes valeur asccii.
    Je me trompe de table. pour é => 87
    pour è => 88
    87 et 88 pour é et è ce n'est tout simplement pas possible dans aucun encodage dérivé de l'ASCII (ASCII étendu, UTF-8 etc.) vu que les caractères accentués (et tous les caractères non-présents dans l'ASCII originel) ont une valeur supérieure ou égale à 128.

    'é' en UTF-8 correspond à deux char successifs: 0xC3 (195) et 0xA9 (169). En signé, ça ressemble à -61 -87. En Windows-1252 et en Latin-1, ça correspond aux caractères 'Ã' et '©'.
    'é' en Windows-1252 et en ISO-8859-1 (Latin-1) (et à fortiori Unicode) correspond à 0x00E9 (233). En signé, ça fait -23.
    'é' en IBM-850 correspond à 0x82 (130). En signé, ça fait -126. En Windows-1252, ça correspond au caractère '‚' (U+201A)


    Je pense que le 87 que tu vois est en fait le -87 du second octet d'un é en UTF-8.
    Ce qui veut dire que l'entrée reçue par ton programme est en UTF-8. Ce qui va bien te compliquer les choses, vu que tu vas devoir convertir des séquences de deux octets en un seul!
    Pour ça, il faudra probablement que tu accumules les caractères >=128 dans un buffer. Je vois bien un algo du genre:

    Pour chaque caractère en entrée:
    • S'il est <128 que le buffer n'est pas vide
      • Comparer le buffer aux différentes séquences que tu veux remplacer
        • Si ça matche, écrire le remplacement sur la sortie
        • Sinon, écrire le contenu du buffer sur la sortie
      • vider le buffer
    • Si le caractère est inférieur à 128
      • l'écrire directement sur la sortie
    • sinon
      • l'ajouter au buffer


    Edit: J'ai vu une faille dans l'algorithme que je propose: Il ne traiterait pas correctement plusieurs caractères accentués qui se suivent.
    Pour les traiter correctement, il n'y a pas d'autre choix que comprendre le fonctionnement d'UTF-8, notamment comment le premier octet d'une séquence indique sa taille.
    Ou bien on peut juste tricher, en se disant qu'on veut juste connaïtre la différence entre un "début" de séquence UTF-8 et un non-début. Les caractères de "début" d'une séquence UTF-8 ont une valeur supérieure où égale à 0xC0 (192)

    Pour chaque caractère en entrée:
    • S'il est <128 que le buffer n'est pas vide
      • Comparer le buffer aux différentes séquences que tu veux remplacer
        • Si ça matche, écrire le remplacement sur la sortie
        • Sinon, écrire le contenu du buffer sur la sortie
      • vider le buffer
    • Si le caractère est inférieur à 128
      • l'écrire directement sur la sortie
    • sinon
      • S'il est >=192 (0xC0) que le buffer n'est pas vide
        • Comparer le buffer aux différentes séquences que tu veux remplacer
          • Si ça matche, écrire le remplacement sur la sortie
          • Sinon, écrire le contenu du buffer sur la sortie
        • vider le buffer
      • l'ajouter au buffer
    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
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 751
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Edit: J'ai vu une faille dans l'algorithme que je propose: Il ne traiterait pas correctement plusieurs caractères accentués qui se suivent.
    Lis la page Wikipédia UTF-8

    En gros l'UTF-8 est compatible ASCII, mais varie entre 1 et 4 octets.
    Donc c'est 1 encodage assez pénible (par exemple pour les bases de données) parce que tu dois lire la séquence pour découper les caractères.

    en gros, si ton octet a 1 valeur de :
    • 00 à 7F (127) (le dernier bit est zéro) : 1 seul octet (<- ASCII)
    • C2 (194) à DF (223) (l'octet commence par/ à gauche c'est 110) : 2 octets
    • E0 (224) à EF (239) (l'octet commence par/ à gauche c'est 1110) : 3 octets
    • F0 (240) à F3 (243) (l'octet commence par/ à gauche c'est 11110) : 4 octets
    • F4 (244) (l'octet est 1111 0100) : 4 octets

  7. #7
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Coucou tout le monde,

    S'il arrive à mettre un é dans un char et l'afficher, alors ce n'est pas de l'utf-8.
    Pour avoir un int à partir d'un char nommé c il faut un cast : int val= static_cast<unsigned char>(c), sans cela, la comparaison avec les codes ascii donnera des résultats inattendus. Mais le mieux serait encore de ne pas les utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (static_cast<char>(val) == 'é') {c= 'e';} 
    else if (static_cast<char>(val) == 'ě') {c= 'e';}
    else if ...
    on aura le bonus d'une optimisation équivalente au switch s'il ne connaît pas encore.

    P.-S: Message écrit sur téléphone, difficile de faire sans coquilles.

  8. #8
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Bonjour et merci de vos aides.
    Je prend en compte l'UTF 8. https://www.utf8-chartable.de/unicod...le.pl?utf8=dec
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    valeur = caractere;
     
    		if (valeur >= 195128 && valeur <= 195133) {caractere = 'a';}
    		if (valeur >= 195160 && valeur <= 195165) {caractere = 'a';}
    		if (valeur == 195135) {caractere = 'c';}
    		if (valeur == 195167) {caractere = 'c';}
    		if (valeur >= 195136 && valeur <= 195139) {caractere = 'e';}
    		if (valeur >= 195169 && valeur <= 195171) {caractere = 'e';}
    		if (valeur >= 195172 && valeur <= 195175) {caractere = 'i';}
    		if (valeur == 195176) {caractere = 'o';}
    		if (valeur >= 195178 && valeur <= 195182) {caractere = 'o';}
    		if (valeur >= 195184) {caractere = 'o';}
    		if (valeur >= 195185 && valeur <= 195188) {caractere = 'u';}
    		if (valeur == 195189 && valeur == 195191) {caractere = 'y';}
     
     
     
     
    cout<<caractere;
    Pour traiter les lettres suivantes:
    valeurAsccii = caractere;
    --déformatage if ect...--
    cout<<caractere;

    ça donne
    é
    è
    ç
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cout<<valeurAsccii;
    donne ceci
    -61-8710-61-8810-61-8910-61-9610-1
    Ce n'est donc pas la bonne table de conversion .

    Merci.

  9. #9
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Ben si, le fichier est en utf-8, avec saut de ligne au format Unix.

    -61 -87 <=> é (hex C3 A9)
    10 <=> saut de ligne
    etc

    Fais un cout<< caractere<< '\n'; pour t'en convaincre.

    Enregistre ton fichier en Windows-1252, en ISO-8859-1 (Latin-1) ou encore ISO-8859-15 (Latin-9) sinon ce sera trop complexe pour toi.

  10. #10
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Merci.
    Comment fait on le passage en décimale.

  11. #11
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Citation Envoyé par Philcmoi Voir le message
    Comment fait on le passage en décimale.
    On va pas dire "passer" mais "afficher" car ça valeur ne change pas.
    Si tu veux afficher la valeur décimal d'un caractère, tu peux le caster en int par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
     
    int main()
    {
        char c = 'a';
        std::cout << c << std::endl;
        std::cout << static_cast<int>(c) << std::endl;
    }
    Comme expliqué plus haut pour les lettres accentuées ça peut être plus compliqué selon l'encodage utilisé.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  12. #12
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Pourquoi -61 -87
    Que veulent dire ces chiffres négatifs ?

  13. #13
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    C'est parce que char et int sont des types signés. Si tu veux le résultat en non signé, il faut des cast en conséquences.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
     
    int main()
    {
        char c = 'é';
        std::cout << c << std::endl;
        std::cout << static_cast<unsigned int>(static_cast<unsigned char>(c)) << std::endl;
    }
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  14. #14
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 751
    Par défaut
    Utilise 1 outil comme r12a pour convertir les caractères dans les différents encodages

    Tu vois que le caractère é en UTF-8 c'est 0xC3 0xA9
    • 0xC3 : 195 ou -61
    • 0xA9 : 169 ou -87

    Comme je l'ai dit dans mon message (#6) : 0xC3 c'est 11000011 en binaire, commence par 110, donc c'est 1 caractère sur 2 octets

    Édit: 0xC3 0xA9 c'est en binaire 1100 0011 1010 1001 soit le caractère 1110 1001 soit 0xE9, 233

  15. #15
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    On voit que les valeurs UTF sont reconnue mais pourquoi on ne peut pas les extraire et affiché leur correspondance sans accent en minuscules.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    caractere = fgetc(fic);
     
     
    if (caractere>='A' && caractere<='Z') {  //ici ca fonctionne le A à Z est bien reconnu.
    	caractereMinuscule = caractere + 32;
    // cout<<caractereMinuscule;
    caractere = caractereMinuscule;
     cout<<caractere;
     }
    else {
     
    	valeur = (int) caractere;
    //	cout<<caractere;
     
     
    		if (valeur >= 192 && valeur <= 194) {caractere = 'a';}  // ici les a accentués ne sont pas reconnus  ???
    		if (valeur >= 224 && valeur <= 226) {caractere = 'a';}  // idem ???

  16. #16
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Pourquoi tu t’embête à comparer avec des valeurs qui ne correspondent pas forcement (dépendent l'encodage) et non pas directement avec les caractères en questions ?
    Sous quel système es-tu ?
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  17. #17
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Merci je suis sous windows 10.
    Je vais faire un case pour chaque lettre accentué.
    J'espère que ça ira, ça fait trois jours que je cherche, 5 heures par jours.
    Je vais tester ta solution.
    Ôu je peux utiliser par exemple suivant l'ordre des caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (caractere>='è' && caractere<='ë') // ect ...
    Si c'est ça , ça va m'ôter l'épine du pied.

  18. #18
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Citation Envoyé par CGi Voir le message
    Pourquoi tu t’embête à comparer avec des valeurs qui ne correspondent pas forcement (dépendent l'encodage) et non pas directement avec les caractères en questions ?
    "Le caractère en question" va également dépendre de l'encodage (mais côté fichier source et/ou compilateur cette fois-ci).
    D'ailleurs je me demande bien ce que char c='é' va donner avec de l'UTF-8...
    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.

  19. #19
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    En effet ça semble ne pas marcher.

  20. #20
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    D'ailleurs je me demande bien ce que char c='é' va donner avec de l'UTF-8...
    Ça ne compilera pas, é étant un multichar en utf-8, il ne tiendra pas dans un char.
    C'est pour cette raison que j'avais écrit

    Citation Envoyé par kaitlyn Voir le message
    S'il arrive à mettre un é dans un char et l'afficher, alors ce n'est pas de l'utf-8.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/12/2010, 02h27
  2. Codes ASCII des fleches directionelles?
    Par H-raf dans le forum C
    Réponses: 15
    Dernier message: 30/05/2008, 10h28
  3. Convertir des codes ASCII en lettres
    Par grigri dans le forum Pascal
    Réponses: 4
    Dernier message: 14/04/2006, 11h54
  4. transcoder des codes ascii en caractères
    Par gillou026 dans le forum Langage
    Réponses: 6
    Dernier message: 06/03/2006, 09h25
  5. chaîne à partir des codes ascii
    Par parsy dans le forum Langage
    Réponses: 2
    Dernier message: 05/08/2005, 22h19

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