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ères latins et non latins


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Ludocrate
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ludocrate

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Par défaut Affichage de caractères latins et non latins
    Bonjour !

    Je me permets de poster un sujet ici concernant l'affichage simultané de caractères latins et non latins en c++, en console (sous windows); problème devant lequel je bute et dont les multiples solutions trouvées ne convenaient pas jusqu'à maintenant.

    Voici le code:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <cstring>
    #include <limits>
    #include <cstdlib>
     
     
    int main()
    {
    	std::string name, lang, line;
    	bool is_lang = false;
     
    //A_LISTER LES FICHES
        std::cout << "Здравствуйте !" << std::endl;
    	std::cout << "FICHIERS DISPONIBLES EN LECTURE:" << '\n' << '\n' << std::endl;
    	system( "dir c:\temp /A /B /O:GEN" );
     
    //B_SAISIR NOM DE FICHE
    	std::cout << '\n' << "Entrer le nom de fichier:" << std::endl;
    	std::getline( std::cin, name );
     
    //C_SAISIR LA LANGUE D'AFFICHAGE
    	std::cout << '\n' << "Choix de la langue: [FR|RU]" << '\n' << std::endl;
    	std::getline( std::cin, lang );
     
    //D_AFFICHER LES MOTS DE LA PARTIE "LANGUE" A "FIN_LANGUE"
        // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        std::ifstream File( name.c_str() ); //nécessité de convertir le string en char
     
        if ( File ) // ce test échoue si le fichier n'est pas ouvert
        {
            // cette boucle s'arrête dès qu'une erreur de lecture survient ou qu'on arrive à la fin de la section
            while ( std::getline( File, line ) && line != "END_"+lang)
            {
                if(is_lang)
    			{
    				// afficher la ligne à l'écran
    				std::cout << line;
    			}
    			if(line == lang) {is_lang=true;}
            }
    		//pause:
    		std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    		//nettoyage du buffer et rembobinage au début
    		File.clear();
    		File.seekg(0, std::ios::beg);
     
    //E_A CHAQUE FOIS QU'ON APPUIE SUR ENTREE, AFFICHER LA REPONSE
     
    		std::cout << '\n' << "Appuyer sur entrée pour afficher la correction" << '\n' << std::endl;
    		if(lang == "RU")
    		{
    			lang = "FR";
    		}
    		else
    		{
    			lang = "RU";
    		}
    		while ( std::getline( File, line ) && line != "END_"+lang)
            {
    			if(is_lang)
    			{
    				// afficher la ligne à l'écran
    				std::cout << line;
    				//pause:
    				std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    			}
    			if(line == lang) {is_lang=true;}
            }
    		File.clear();
    		File.seekg(0, std::ios::beg);
        }
     
    //F_APPUYER SUR X TOUCHE POUR REVENIR AU MENU
     
    	std::cout << '\n' << "Appuyer sur entrée pour revenir au menu" << std::endl;
    	std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
     
    	return 0;
     
    }
    En cours de confection donc, mais le problème est là: impossible d'afficher ce "Здравствуйте !", j'ai utilisé plusieurs propositions de plusieurs autres forums, (ex: setlocale), mais, dans l'échec, je viens donc demander de l'assistance ici.

    Une solution à proposer ?

    EDIT:
    NB: il semble que sur les forums de developez, la balise code convertisse automatiquement les caractères cyrilliques; dans mon code il s'agit bien d'un std::cout << "Здравствуйте !" << std::endl; tel quel.

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    Ca semble fonctionner avec un std::setlocale et std::wcout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include <clocale>
     
    int main(int, char**) {
    	std::setlocale(LC_ALL, "russian_russia.866");
    	std::wcout << L"Здравствуйте !" << std::endl;
     
    	return 0;
    }


    L'affichage dans la console devrait fonctionner aussi, à condition d'avoir une police gérant ces caractères.

  3. #3
    Membre régulier
    Femme Profil pro
    Ludocrate
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ludocrate

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Par défaut
    Dans ce but j'avais déjà changé la police pour Lucida Console, or voilà le résultat avec le code donné ci-dessus:

    Nom : console.png
Affichages : 264
Taille : 19,3 Ko
    Images attachées Images attachées  

  4. #4
    Membre régulier
    Femme Profil pro
    Ludocrate
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ludocrate

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Par défaut
    Du coup, ce serait un problème non lié au code ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    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 772
    Par défaut
    Commande à taper: chcp 65001

  6. #6
    Membre régulier
    Femme Profil pro
    Ludocrate
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ludocrate

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Par défaut
    Merci beaucoup foetus, pour ce qui est du texte russe, il s'affiche maintenant: j'avais tenté la commande auparavant mais sans le wcout en même temps. Toutefois dans mon programme maintenant l'erreur vient ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(is_lang)
    {
    // afficher la ligne à l'écran
    		std::wcout << line;
    }
    Je ne dois pas employer correctement wcout mais j'avoue ne pas bien comprendre la page de c++ reference.

Discussions similaires

  1. Réponses: 72
    Dernier message: 07/05/2010, 16h09
  2. XML-Flash - caractères non-latin
    Par heyax dans le forum Flash
    Réponses: 2
    Dernier message: 26/02/2008, 18h12
  3. Problème de caractères non latin dans un formulaire
    Par Huntress dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2006, 13h34

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