Console Windows

pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 - Modifié le 5 juil. 2023 à 09:12
pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 - 7 juil. 2023 à 10:03

Bonjour,

Il y a un petit problème très classique quand on veut afficher des caractères accentués dans la console Windows. Cela concerne aussi quelques caractères spéciaux, exemples : ç æ ñ. Ce problème qui est dû à MicroSoft est très bien connu et il y a sur Internet beaucoup d'informations et plusieurs méthodes pour effectuer correctement ces affichages. Voici un programme très simple en C++ qui permet les affichages correspondants.

#include <iostream>
#include <fstream>
#include <string>

int main(int argc, char* argv[]) {

    if(argc != 2) {
        std::cerr << "Il faut faire : lire fichier.txt." << std::endl;
        exit(EXIT_FAILURE);
    }

    setlocale (LC_ALL,"");

    std::ifstream file;
    std::string line;
   
    file.open(argv[1]);
    
    if(file.fail()) {
        std::cerr << "Le fichier " << argv[1] << " n'est pas disponible." << std::endl;
        exit(EXIT_FAILURE);
    }

    while(getline(file, line)) {
        std::cout << line << std::endl;
    }
    std::cout << std::endl;

    file.close();
    
    return 0;
}

Mais il demeure encore deux problèmes résiduels à ce sujet. Le caractère œ en minuscule (exemple : bœuf) n'est pas affiché correctement. Et les seuls caractères spéciaux en majuscules qui sont affichés correctement sont : Ç Ñ É Æ.

Est-ce que quelqu'un connaît une solution pour afficher correctement œ et toutes les majuscules dans la console Windows ? Remerciements, pgl10.


4 réponses

pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 11
5 juil. 2023 à 14:20

Avec le petit programme présent ci-dessus et le fichier suivant :

Noëlle aperçut bientôt là-bas l'âne bâté
À mesure qu’il s’éloigne ...
Âne que tu es ! 
Étant donné qu’il ...
Être ou ne pas être ...
Île du Pacifique, Tahiti se distingue par ...
Ôte-toi de là ! 

on obtient cet affichage dans la console Windows.

On voit bien la lettre É affichée correctement mais pas les autres voyelles accentuées en majuscules. Les divers essais que j'ai pu faire et qui sont basés sur les documentations disponibles sur Internet produisent les mêmes résultats. Il y a-t-il une directive ou une instruction pour faire correctement cet affichage ? Je n'ai pas trouvé la réponse appropriée mais ce serait souhaitable. Merci.


Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 11
5 juil. 2023 à 19:48

Bonjour,

le type char a 256 valeurs possibles, si on prend en compte toutes les langues, c'est insuffisant pour tous les caractères. Sous Windows, en Europe de l'ouest, la table des caractères choisie est souvent la Windows-1252. On parle de page de code, et cette page de code contient bien tous les caractères français.
Mais la console (cmd.exe) utilise par défaut une toute autre page de code, c'est l'IBM-850.
En commençant ton programme par 

system("chcp 1252 > NUL");

ça demande à la console d'utiliser la Windows-1252. Ca devrait suffire si la police de caractère de la console a tous les caractères français.

pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 11
6 juil. 2023 à 14:30

Bonjour Dalfab,

Merci beaucoup pour votre réponse qui complète bien ce que j'avais indiqué. Mais j'ai essayé plusieurs variantes de l'instruction supplémentaire : system("chcp 1252 > NUL"); sans avoir réussi ce que je souhaitais.

Je viens de publier sur CCM-CS un programme qui effectue le remplacement de l'encodage ANSI par l'encodage OEM du texte que l'on affiche dans la console Windows. Je vous propose de comparer le code source du programme principal tel que publié et l'image correspondante de la console Windows.

Ce programme n'utilise aucune dépendance extérieure.
Cordialement, pgl10


pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 11
Modifié le 7 juil. 2023 à 10:11

Bonjour Dalfab,

Je dois préciser maintenant que ce j'ai écrit ci-dessus a été obtenu avec la police par défaut de la console Windows, c'est à dire le police Polices Raster. Mais il est important d'indiquer que l'utilisation de la console Windows avec la police Lucida Console a un tout autre fonctionnement. En voici un exemple avec l'instruction

   system("chcp 1252 > nul");

Si je compile le programme extrêmement simple en C++ suivant :

#include <iostream>
 
int main(void)
{
  system("chcp 1252 > nul");
  std::cout << std::endl << "Ève Béart à la télévision" << std::endl << std::endl;
  system("pause");
  return 0;
}

j'obtiens dans la console Windows avec la police Lucida Console ceci :

Et pour utiliser la police Lucida Console :
- cliquer tout en haut de la fenêtre
- cliquer sur Propriétés
- choisir : Police => Lucida Console

Merci beaucoup à Dalfab d'avoir indiqué l'emploi de cette instruction : system("chcp 1252 > nul"); 

Très cordialement, pgl10


Rejoignez-nous