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 :

Caractères accentués non affichés


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Caractères accentués non affichés
    Bonjour,

    je débute en C++, j'essaie tant bien que mal de développer un agenda en mode console. J'ai créé une classe Agenda et j'ai implémenté une méthode write2File qui copie les informations d'une liste ( (list<Agenda>) dans un fichier. Mais voilà, dans le fichier les accents et autres caractères (la cédille) ne sont pas affichés correctement.

    Code mAgenda.cpp : 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
    29
    30
    31
    32
    33
    34
    35
    36
     
    int main (){
     
    Agenda agenda;
    list <Agenda> listeAgenda;
     
    int lejour,lemois,lannee,lheure;
    string lactivite;
    cout<<"Entrez le jour :"<<endl;
    cin>>lejour;
    fflush(stdin);
    cout<<"Entrez le mois :"<<endl;
    cin>>lemois;
    fflush(stdin);
    cout<<"Entrez l'annee :"<<endl;
    cin>>lannee;
    fflush(stdin);
    cout<<"Entrez l'heure :"<<endl;
    cin>>lheure;
    fflush(stdin);
    cout<<"Activité :"<<endl;
    //getline(istream,string) utilisé pour le type string 
    getline(cin,lactivite);
    fflush(stdin);
    cout<<"continuer l'encodage ? (o/n) "<<endl;
    cin>>encore; fflush(stdin);
    ...
    list<Agenda>::iterator ite=listeAgenda.begin();
    // je parcoure ma liste, et insère les données aux endroits voulu
    for(ite=listeAgenda.begin();ite != listeAgenda.end();++ite){
    ...
    listeAgenda.insert(ite,*(new Agenda(lejour,lemois,lannee,lheure,lactivite)));
    ...
    }
    ...
    }

    Code Agenda.cpp : 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
    ...
    void Agenda::write2File(list<Agenda> &lA)
    {
    	list<Agenda>::iterator it=lA.begin();
    	ofstream sortieFichierAgenda( "agenda.txt", ios::out );
    	
    	if ( !sortieFichierAgenda ) { // Opérateur ! surchargé.
    		cerr << "Ouverture du fichier impossible" << endl;
    		exit( 1 );
    	}
    	
    	for(it=lA.begin();it != lA.end();++it){
    //sortieFichierAgenda << (*it).jour << ' ' << (*it).mois << ' ' << (*it).annee << ' ' << (*it).heure << ' ' << (*it).activite << '\n';
                   //cout<<(*it).activite => s'affiche correctement dans la console
    		sortieFichierAgenda << (*it) <<endl;
    	}
    	sortieFichierAgenda.close();
    }
    ...

    Voilà ce que ça donne à la console :

    Entrez le jour :
    03
    Entrez le mois :
    10
    Entrez l'annee :
    2008
    Entrez l'heure :
    1830
    ActivitÚ :
    rdv avec Françoise à la côte
    continuer l'encodage ? (o/n)
    n
    3/10/2008 1830 : rdv avec Françoise à la côte

    1/1/2009 8 : projet C++

    2/3/2009 9 : rÚveil matin

    4/8/2009 12 : vacances

    Appuyez sur une touche pour continuer...

    Et le résultat obtenu dans le fichier :

    3/10/2008 1830 : rdv avec Fran‡oise … la c“te


    1/1/2009 8 : projet C++

    2/3/2009 9 : réveil matin

    4/8/2009 12 : vacances

    Merci d'avance.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 287
    Points
    218 287
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Peut être un problème avec l'envodage des caractères dans le fichier ( possible que ce soit dans le fichier source ) ... mais je n'en sais trop rien. faut faire des essais , en réenregistrant ton fichier sourcee ( celui ou y a les caractères ) dans un autre encodage.
    Ou alors c'est simplement le lecteur que t'utilise pour tes fichiers, qui foire.

    Tu utilise quel compilateur ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Salut,

    J'utilise visual studio 2008.

    Dans ma fonction write2file à la place de (*it).activite se je mets l'info "en clair" ça s'écrit correctement dans mon fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	for(it=lA.begin();it != lA.end();++it){
                    //sortieFichierAgenda << (*it).activite << '\n';
    		sortieFichierAgenda << "Françoise a chanté" << '\n';		
    	}
    Si le problème vient de là, comment pourrais-je alors encoder (*it).activite en iso ou utf8 ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    J'ai encore fait quelques tests. Le problème surviendrait apparemment au moment de l'encodage avec le cin.

    j'ai surchargé ma fonction write2File pour mes tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Agenda::write2File(string chaine)
    {
    	ofstream sortieFichierAgenda( "agenda.txt", ios::out );
    	if ( !sortieFichierAgenda ) {
                ...
    	}
    	sortieFichierAgenda << chaine << '\n';
    	sortieFichierAgenda.close();
    }
    string sujet = "françoise à la méér";
    agenda.write2File(sujet);
    => Fonctionne

    Mais :

    cout<<"Activité :"<<endl;
    getline(cin,lactivite);
    fflush(stdin);
    agenda.write2File(lactivite);

    => Foire

    Le cin me boufferait-il mes accents ?

    Merci de votre aide parce que là, ce truc commence à me rendre dingue

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Normalement, avec Visual C++, simplement ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::locale::globale(std::locale(""));
    Au début du main pourrait améliorer la situation.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé mais ça n'a malheureusement pas eu l'effet escompté, ce qui a changé c'est que maintenant, ça s'affiche également de manière erronée dans la console. (Je dis ça on sait jamais que ça pourrait faire avancer le schmil)

    Si qqu'un veut lire mes sources pour pouvoir résoudre mon problème, moi je suis open, c'est un projet que je dois présenter dans 2 jours à l'examen et ça m'aiderait pas mal de résoudre ce souci.

    D'avance merci.

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Effectivement, comme d'habitude je ne fais pas de lecture sur la console, juste de l'écriture, je ne m'en étais pas rendu compte.

    A une époque où même pour l'écriture, ce que j'ai posté ne marchait pas (et il ne marche toujours pas avec gcc sous windows la dernière fois que j'ai testé), j'avais posté le sujet suivant qui décrivait une méthode plus lourde à mettre en place, mais qui marchait :
    http://www.developpez.net/forums/d19...nsole-windows/
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 287
    Points
    218 287
    Billets dans le blog
    117
    Par défaut
    Avec Visual Studio 2008, tu peux essayer de voir dans les propietés du projet, encodage des caractères. ( Cherche un peu, je crois que c'est juste au dessus du menu C/C++ qui est au dessus de celui pour le linker... ( en espérant avoir était assez précis pour que tu trouve )

    Dans le menu dont je parle du peux choisir entre l'unicode , je crois, l'encodage en 1 byte, et l'encodage en multi byte. ( si je me rapelle bien )

    Essaie les différents modes, peut être que cela marchera mieux
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    @littleWhite :

    J'avais déjà essayé aussi de changer les différentes options mais ça n'a finalement pas changé grand chose non plus, malheureusement.

    Mais finalement ça s'affiche tout à fait correctement dans la console, ce qui est le principal (en tout cas pour mon programme) donc pour le moment ça va.

    Je vais quand même me renseigner.

Discussions similaires

  1. Caractères accentués non reconnus par PowerPoint
    Par KiwiXléo dans le forum Powerpoint
    Réponses: 3
    Dernier message: 14/09/2008, 18h28
  2. [MySQL] caractères spéciaux non affichés
    Par Tikenjahfakouli dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/05/2008, 12h54
  3. [SQL] Les caractère accentués s'affichent mal après une requête SQL
    Par sayerh dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/03/2008, 12h56
  4. Réponses: 1
    Dernier message: 14/10/2007, 21h00
  5. [SQL] Problème d'encodage : les caractères accentués, sont affichés en "?"
    Par arnaudperfect dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/10/2007, 15h57

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