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 :

Affichage de caractère Unicode


Sujet :

C

  1. #1
    Nouveau Candidat au Club Avatar de BarbeRousseLibre
    Homme Profil pro
    Admin sys Linux junior
    Inscrit en
    Mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Admin sys Linux junior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Affichage de caractère Unicode
    Salut à toutes et à tous,

    J'ai acheté le livre "du C au C++ - De la programmation procédurale à l'objet - 2è édition", dans le chapitre 1 à l'exercice 2.5.2 on me demande d'afficher à partir de la table ASCII (que je récupère via 'man ascii' sur mon système) des caractère unicodes... Là j'ai pas bien compris, il me semble bien que l'on ne pouvait afficher que les 255 caractères ASCII en se servant des valeurs octale, décimale et hexadécimale. Donc je ne voyais pas trop comment j'étais censé afficher des caractères unicodes avec le code décimale de la table ASCII...

    Je n'y arrive pas, même en faisant une boucle affichant les caractères à partir de la décimale 0 jusqu'à la 255, les premières dizaines étant vide.

    Je finis par me jeter sur la correction de l'exercice, or celle-ci ne me parait pas plus clair puisque le résultat est identique: du vide.

    Voici la correction:

    Exercice 2
    Dans un programme, déclarer un char et lui affecter une valeur choisie au hasard.
    Afficher la valeur entrée en utilisant les deux formats %d et %c, qu'est ce que ça donne ?
    Réessayer en demandant cette fois une valeur comprise entre 97 et 122. Que remarquez-vous ?
    Quelles valeurs permettent d'afficher les caractères *, @, ♠, ♣, ♥, ♦. ?
    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
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    char c = 69;
    
        printf("%d, %c\n", c,c); // imprime 69, E
    
        c=110;
        printf("%d, %c\n", c,c);  // imprime 110, n , lettre minuscule
    
        printf("%d, %d, %d, %d\n", '♠','♣', '♥', '♦'); // pose un petit problème ...
    
        printf("%c, %c, %c, %c, %c, %c, %c\n",64, 1, 2, 3, 4, 5, 6);// c'est le résultat avec smiley en prime
    
        return 0;
    }
    Donc au dernier printf, si je demande à affiche les décimales 1 à 6 je suis censé obtenir '♠','♣', '♥', '♦' + un smiley, or sur ma Debian 10 j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    69, E
    110, n
    14850464, 14850467, 14850469, 14850470
    @, , , , , ,
    Auriez-vous une idée sur ce problème ? Je suppose que ça vient de quelque part sur mon système.

    PS: Je ne sais pas si c'est intéressant, mais mon éditeur de texte est vim.

    Par avance, merci.

    BarbeRousseLibre

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Si tu lis la documentation de printf (<- lien cplusplus en anglais), le format qui gagne semble être %lc

    Ensuite tu as la fonction wprintf (<- lien cplusplus en anglais), mais sur les exemples, le format %lc est utilisé : donc cette fonction change juste le type des paramètres (de char à wchar_t), mais les formats semblent inchangés

  3. #3
    Nouveau Candidat au Club Avatar de BarbeRousseLibre
    Homme Profil pro
    Admin sys Linux junior
    Inscrit en
    Mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Admin sys Linux junior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Salut et merci pour ta réponse.

    Cela dit, tu parles du format %lc mais celui-ci ne semble présent sur aucune des deux pages que tu me link. Je ne trouve pas trop d'info sur "%lc" sur le net. Peut-être parlais-tu de %ld ? Ou alors %lc serait un "long character" ? Je dis ça parce que je vois des formats que je n'ai pas encore rencontré (ex: %lx...).

    Sinon, j'ai tenté d'utiliser wprintf et ça donne en sortie:

    14850464, 14850467, 14850469, 14850470
    (et cela même en remplaçant %c par %lc)

    De plus je ne suis pas certains de comprendre la différence entre printf et wprintf (wide printf c'est ça?), ils ne traitent pas le formatage de la chaîne de la même façon ?

    BarbeRousseLibre

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Cela fonctionne :

    printf("%c, %c, %c, %c\n", '\u2660', '\u2663', '\u2665', '\u2666');
    printf("%c, %c, %c, %c\n", '♠', '♣', '♥', '♦');
    Il y a 2-3 choses à faire attention :
    1. '' ou "" c'est soit de l'ASCII soit du MBCS soit de l'UTF-8. Mais L'' et L"" c'est de l'UTF-16. L'UTF-16 implique wchar_t et toutes les fonctions qui vont avec (comme wprintf)
    2. Il existe des échappements pour les caractères Unicode : \x (\xnn hexadecimal ), \u (\unnnn, code point U+nnnn) et \U (\Unnnnnnnn, code point U+nnnnnnnn)
    3. Il faut faire attention à son terminal, l'encodage et le jeu de caractères. Sous Windows c'est du codepage OEM, sous Linux c'est de l'UTF-8


    Et si , si tu regarde le tableau sur la page printf, pour afficher un wchar_t\ wint_t c'est le format %lc, et une chaîne (wchar_t*), c'est le format %ls.



    Citation Envoyé par BarbeRousseLibre Voir le message
    De plus je ne suis pas certains de comprendre la différence entre printf et wprintf (wide printf c'est ça?), ils ne traitent pas le formatage de la chaîne de la même façon ?
    Si, les formats semblent être identiques, mais la signature change

Discussions similaires

  1. Affichage des caractères Unicode
    Par makeneo dans le forum Qt
    Réponses: 6
    Dernier message: 21/07/2012, 17h35
  2. [AC-2007] Affichage caractères unicode dans état
    Par microsophistic dans le forum IHM
    Réponses: 1
    Dernier message: 04/07/2011, 11h45
  3. Affichage de caractères spéciaux avec Unicode
    Par bocarB dans le forum Langage
    Réponses: 3
    Dernier message: 30/10/2008, 13h40
  4. Affichage caractères unicodes dans la console
    Par boss_gama dans le forum C++
    Réponses: 18
    Dernier message: 05/03/2007, 18h27
  5. [Delphi] Affichages de caractères sur l'écran
    Par julie20 dans le forum Débuter
    Réponses: 12
    Dernier message: 17/09/2003, 23h21

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