• # unsigned char

    Posté par . En réponse au message Gestion des accents et caractères bien français !. Évalué à 2.

    Au minimum, il fait que tes caractères soient déclarés 'unsigned char', sinon ils risquent d'être pris pour des 'signés', ce qui pourrait faire perdre du sens à tout caractère au dessus de 127 en code ASCII. Je parle en termes de portabilité sous les Unixes... Sous Linux x86, les 'char' signés perdent effectivement leur sens, 'é' devient '-87'.

    Il est possible aussi que l'internationalisation de ton éditeur de texte ne soit pas dans les mêmes normes que ta ligne de commande ou le mode graphique de ton programme !

    cat Accents.c

    devrait être révélateur : si tu ne vois pas les accents pareils que sous l'éditeur, t'as trouvé une vache de cause de perte de temps.


    Sous Linux :

    $ cat Accents.c

    #include <stdio.h>

    main()
    {
    unsigned char lettre = (unsigned char)'é' ;

    printf("lettre numéro %d\n", (int)lettre) ;

    if (lettre == (unsigned char)'é') {
    printf("Lettre accentuée détectée...\n") ;
    lettre = 'e';
    }

    printf("lettre numéro %d\n", (int)lettre) ;

    return(0) ;
    }

    $ gcc Accents.c
    Accents.c:5:40: attention : constante caractère multi-caractères
    Accents.c:9:31: attention : constante caractère multi-caractères

    $ ./a.out
    lettre numéro 169
    Lettre accentuée détectée...
    lettre numéro 101


    Attention les warnings "constante caractère multi-caractères" devraient être étudiés de près en environnement professionnel. Pour un TP, il y a matière à discuter avec tes profs sur ce vaste sujet de l'internationalisation...

    Après pour aller plus loin, comme déjà signalé, mbrtowc()
    et wcrtomb() et le type wchar_t (wide character), ça c'est le top... Il y a de quoi faire.