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

Langage C++ Discussion :

Afficher des caractères spéciaux


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Afficher des caractères spéciaux
    Bonjour tout le monde
    Avec un ami développeur, on s'était aperçu d'un problème quand on voulait afficher le caractère █ le caractère n'était pas reconnu par le compilateur (Je suis sur Visual Studio 2019)

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <iostream>
     
    int main(int argc, char* argv[])
    {
            std::cout << "&#9608;" << std::endl;
            system("pause");
    }

    Merci d'avance à tout ceux qui pourront nous aider

  2. #2
    Expert éminent sénior
    Pour commencer, essaie avec std::wcout et une chaîne large (L"&#9608;").
    Mais vu que tu es sous Windows, même ça ce n'est pas dit que ça marche (pour savoir si ça a une chance de fonctionner, je recommanderais de faire un test en C#).
    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.

  3. #3
    Nouveau membre du Club
    ArcadeurTech,

    Deux solutions présentées, une pragmatique, l'autre à l'état de piste que je te laisse creuser si tu souhaites.

    PREMIERE PISTE EN C++

    Essaie par les fonctionnalités apportées par le C++11 (u8). Vérifie que Visual Studio utilise bien la norme C++11 au moins (ce qui doit être le cas par défaut).

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <iostream>
     
    int main(int argc, char* argv[])
    {
       std::cout << u8"\u2573" << std::endl;
     
       return 0;
    }


    Utilise plutôt les codes Unicodes, afin d'éviter les erreurs de ton éditeur (qui normalement gère les unicodes par défaut... mais bon.)
    Voici le site de référence (Ici la plage où se trouve mon caractère spécial 2573) :
    https://unicode.org/charts/PDF/U2500.pdf
    Evite les cast du genre : (wchar_t) "\u2573".

    Sinon tape dans les bibliothèques de ton système (clocale, ou terminaux et la bibliothèque de conversion spécifique pour réaliser ces casts) :
    https://en.cppreference.com/w/cpp/locale/codecvt
    https://en.cppreference.com/w/cpp/locale

    DEUXIEME PISTE EN C, pour comprendre le dedans.


    Si tu veux comprendre vraiment il te faut descendre au niveau C:
    https://www.cprogramming.com/tutorial/unicode.html

    En ce qui concerne windows (que je ne connais pas bien), voici un bon exemple en C pour gérer correctement les caractères étendus :
    https://docs.microsoft.com/en-us/cpp...l?view=vs-2019

    Normalement tu dois avoir une belle croix.

    Bonne soirée;

  4. #4
    Membre expert
    Citation Envoyé par ArcadeurTech Voir le message
    le caractère n'était pas reconnu par le compilateur (Je suis sur Visual Studio 2019)
    L'erreur se présente comment ? Je doute que le compilateur a quoique se soit à faire du contenu de la chaîne. Le problème se situe davantage dans le logiciel qui affiche le texte et n'utilise pas l'encodage prévu comme c'est le cas de cmd. Pour windows, une "correction" rapide est de modifier la locale std::locale::global(locale(""));.

  5. #5
    Expert éminent sénior
    Il faut toujours faire correspondre l'encodage employé dans le terminal avec les sorties envoyées par le programme. Et des encodages, il y en a plein.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Nouveau membre du Club
    Voici un exemple de code assez bas niveau pour qu'il puisse passer avec un compilateur microsoft vieillot (MSVC2010). Testé ok.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <iostream>
    #include <io.h>
    #include <fcntl.h>
     
    int main() {
        _setmode(_fileno(stdout), _O_U16TEXT);
        std::wcout << L"\u2573\n";
    }


    ATTENTION à la console : Utiliser une console qui accepte l'UNICODE (normalement sous les windows actuels la console l'est).
    On peut aussi écrire le tout dans un fichier puis l'éditer avec un éditeur acceptant l'unicode.

###raw>template_hook.ano_emploi###