POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE CONSOLE

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 14 déc. 2011 à 07:10
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 - 21 déc. 2011 à 12:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53868-pour-afficher-les-caracteres-accentues-sous-windows-en-mode-console

pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
21 déc. 2011 à 12:21
Renfield et FraGag,
Merci beaucoup d'avoir indiqué comment on peut éviter le problème ou comment le traiter autrement. Il y a probablement encore d'autres solutions ( Unicode ... ). Et celle-ci peut admettre des variantes. A chacun de faire son choix.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2011 à 10:56
vues les manipulations requises, ca tend a me rassurer dans mes choix: ne pas mettre d'accent dans mes consoles ^^
Jojo Lancien Messages postés 6 Date d'inscription vendredi 8 juin 2012 Statut Membre Dernière intervention 8 juin 2012
21 déc. 2011 à 08:50
Cette réponse me satisfait, en effet, mieux que la précédente. J'en avais conçu le principe, mais, devant la première réponse, j'avais craint d’être importun.
Avec ce nouveau code, le résultat devient vraiment parfait.
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
Modifié par noctambule28 le 30/10/2013 à 12:47
Jojo Lancien,
Je reprends ici ma réponse faite trop rapidement.
C'est tout à fait exact, si on fait ici : main.exe > texte.txt
On obtient un fichier texte.txt inutilisable.
Mais on peut le corriger facilement avec un montrer.bat : montrer.exe texte.txt console.txt
et le fichier simplifié montrer.cpp suivant :
#include 
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[]) {
ifstream ifs(argv[1]);
ofstream ofs(argv[2]);
string s;
while (getline(ifs, s)) {
char* buf;
buf = new char[s.size()+1];
OemToChar(s.c_str(), buf);
s = buf;
delete [] buf;
ofs << s << endl;
}
return 0;
}

Le fichier console.txt obtenu est conforme à l'affichage ayant été envoyé dans texte.txt
Merci d'avoir indiqué un complément pouvant être utile à certains besoins.
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
19 déc. 2011 à 18:43
Merci Jojo Lancien. L'objectif ici est seulement d'avoir facilement un affichage correct en mode console sous Windows. Convertir les lignes d'un fichier texte.txt serait assez facile. Mais dans quel but ? A quoi servirait le fichier converti ? Le programme Convhtml à : http://www.cppfrance.com/code.aspx?ID=53789 effectue un autre type de conversion pour tous les fichiers .htm ou .html d'un dossier. On pourrait l'adapter facilement avec ou sans appel à CharToOemA().
Jojo Lancien Messages postés 6 Date d'inscription vendredi 8 juin 2012 Statut Membre Dernière intervention 8 juin 2012
19 déc. 2011 à 17:16
Le débutant que je suis est en admiration devant cet exemple d'utilisation de la surcharge en cpp. Les commentaires m'ont également beaucoup appris et, jamais plus, je n'écrirai de programme console qui affiche incorrectement les accents. Mais, bien sûr, celà ne résout pas complètement le problème OEM/ANSI car si on tape la commande
main.exe >texte.txt
seules les lignes non converties seront correctes si on ouvre texte.txt avec le bloc-note.
cs_FraGag Messages postés 81 Date d'inscription jeudi 19 février 2004 Statut Membre Dernière intervention 18 avril 2008
19 déc. 2011 à 03:42
Je n'ai jamais essayé setlocale, mais je sais que SetConsoleCP et SetConsoleOutputCP permettent de définir l'encodage de la console. En passant 1252 aux deux fonctions, la console fonctionnera avec la page de codes 1252. Si je me souviens bien, on peut même spécifier 65001 pour que la console fonctionne en UTF-8; on a alors accès à tous les caractères Unicode (tant que la police utilisée dans la console a les glyphes correspondants).
fredg19 Messages postés 11 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 16 mars 2015
16 déc. 2011 à 14:59
J'approuve PGL10, je crois que le #include <clocale> est la meilleure solution pour les accents.
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
14 déc. 2011 à 10:41
Merci Renfield. C'est une information complémentaire qui intéressera de nombreux visiteurs. A noter que dans http://www.cppfrance.com/code.aspx?ID=53813 fredg19 a écrit dans jour_naissance.cpp : #include <clocale> ... setlocale(LC_ALL, "french"); pour le même besoin. Mais chez moi chacune de ces deux solutions voisines se compile bien mais ne fonctionne pas. Je suppose que d'autres auraient le même résultat que moi.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 déc. 2011 à 07:10
un petit :

setlocale( LC_CTYPE , "fra" ) ;

issu de clocale.h

et zou...
Rejoignez-nous