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 :

[console Windows] Caractères accentués


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut [console Windows] Caractères accentués
    Salut,

    J'ai cherché sur les forums mais probablement que je n'utilise pas les bons mots clés car je ne trouve pas ce qui me satisferait.

    Voilà mon problème. Dans mon code, quand je fais un mon programme affiche en console :
    CaractÞres
    De ce que j'ai trouvé sur le Net, c'est que la classe "string" gère chaque caractères ASCII en signed char... ou quelque chose du genre donc, de -128 à 127 au lieu de 0 à 255...

    Donc, dans ce cas, le caractère "è" a la valeur "-24" ce qui donne un caractères qui n'a pas le sens que je veux. Moi ce que je veux c'est le caractère "138" et j'aimerais bien que ce caractère soit afficher normalement sans que j'ai à utiliser d'artifice quelconque dans mon code. Bien sûr, je voudrais que cela s'applique à tous les caractères au-delà de 127 jusqu'à 255.

    Est-ce que j'ai bien expliqué?
    Quelqu'un connait une solution?

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Effectivement, la recherche avancée n'est pas très douée ...
    -> http://www.google.fr/search?q=accent...nsole+hermitte
    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...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Merci beaucoup pour le lien

    Malheureusement, je trouve que ces solutions sont peu conviviales pour ce que je veux faire. Alors, je me suis fait un petit bout de code à moi.

    Je vous avertis, je ne suis pas un pro du tout !
    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
    string accents(string source)
    {
    	for(unsigned int i=0; i < source.size(); i++)
    	{
    		switch(source.at(i))
    		{
    			case 'à' : source.at(i) = char(133); break;
    			case 'À' : source.at(i) = char(183); break;
    			case 'é' : source.at(i) = char(130); break;
    			case 'É' : source.at(i) = char(144); break;
    			case 'è' : source.at(i) = char(138); break;
    			case 'È' : source.at(i) = char(212); break;
    			case 'ê' : source.at(i) = char(136); break;
    			case 'Ê' : source.at(i) = char(210); break;
    			case 'ö' : source.at(i) = char(148); break;
    			case 'Ö' : source.at(i) = char(153); break;
    			case 'ù' : source.at(i) = char(151); break;
    			case 'Ù' : source.at(i) = char(235); break;
    			case 'û' : source.at(i) = char(150); break;
    			case 'Û' : source.at(i) = char(234); break;
    			case 'ç' : source.at(i) = char(135); break;
    			case 'Ç' : source.at(i) = char(128); break;
    			default:break;
    		}
    	}
     
    	return source;
    }
    et voilà ! Comme la fonction retourne une string, je peux l'utiliser facilement à peu près n'importe où. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << accents("Caractères à é ê ö ù û ç") << endl;
    Évidemment, on peut ajouter tous les autres caractères... ceci était juste un test avec les accents de base.

    Je suis sûr qu'il peut y avoir mieux, mais si ça peut aider quelqu'un, tant mieux.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Altérer ton programme est une fausse bonne idée.
    Altère plutôt ta console.
    -> chcp 1252
    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...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Ça me donne le même résultat... même que c'est pire parceque quand je tappe au clavier des caractères accentués, ça me donne les mêmes caractères incompréhensible.... Avant de faire cette commande, quand je tappais "à" au moins il m'affichait "à" (comme lors d'une saisie avec cin). C'était seulement ce qu'il y avait dans mon code qui était affiché de la mauvaise façon. Avec la commande que tu viens de me donner, là c'est tout qui n'est pas bon

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    La console utilise le code page "DOS Latin 1" (pour conserver un semblant de compatibilité avec les anciens programmes) (CP #437)
    De plus la console utilise par défaut une police de caractère "Terminal" qui est une police Raster.

    1. Changer la police de la console (Lucida Console par exemple)
    2. Changer le code-page de la console "chcp 1252"
    et ca devrait rouler....

    Maintenant, la console est 'sensée' savoir gérer de l'unicode. Récupère donc le stream unicode, et balance ton unicode dedans sans te préoccuper du codepage.


    Enfin, dernière possibilité, encoder directement en 437....

    Si tu as l'unicode (si tu commences à gérer des accents, ca veut dire que tu devrais déjà être en unicode), un simple wcstombcs avec comme code-page de destination 437...

    Sinon, ben il faudra passer par l'UNICODE (mbcstowcs(ANSI_CP,...) puis wcstombcs(437,...)).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 14/09/2013, 21h35
  2. Réponses: 11
    Dernier message: 03/12/2009, 15h09
  3. [Débutant] Pb caractères accentués sous console dos
    Par remitbo dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2007, 14h34
  4. Réponses: 6
    Dernier message: 14/07/2005, 14h25
  5. Caractères accentués en mode console
    Par Koubiacz dans le forum C++
    Réponses: 2
    Dernier message: 13/05/2005, 07h07

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