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

Langage C++ Discussion :

Afficher des caractères spéciaux


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut 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 << "█" << std::endl;
            system("pause");
    }
    Merci d'avance à tout ceux qui pourront nous aider

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour commencer, essaie avec std::wcout et une chaîne large (L"█").
    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
    Inscrit en
    Mai 2002
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 20
    Points : 29
    Points
    29
    Par défaut
    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
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    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 : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    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
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    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
    Inscrit en
    Mai 2002
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 20
    Points : 29
    Points
    29
    Par défaut
    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.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/05/2008, 11h54
  2. Réponses: 2
    Dernier message: 26/07/2007, 08h35
  3. JLabel - afficher des caractères Unicode asiatiques
    Par Nicolas_75 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/02/2007, 12h38
  4. Afficher des caractères et leur code ASCII
    Par hamada_10 dans le forum Pascal
    Réponses: 8
    Dernier message: 26/12/2006, 19h38
  5. [ImageMagick] Mon image affiche des caractères étranges
    Par renaud26 dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 17/03/2006, 17h37

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