Bonjour,
Pour afficher correctement les caractères accentués sous Windows en mode console il faut utiliser le codage ASCII étendu OEM. Pour faire la conversion automatiquement je propose :
/**************** fichier oem.h ****************/
#include <windows.h>
char* ca(const char* s) { // pour convertir en code ASCII OEM
char* c = new char[strlen(s)+1]; // une chaine de caractères
CharToOem(s,c);
return c;
}
std::string sa(const std::string &s) { // pour convertir en code
char* c = new char[s.size()+1]; // ASCII OEM une string
CharToOem(s.c_str(),c);
std::string t = c;
delete [] c;
return c;
}
/**************** fichier main.cpp ****************/
#include <iostream>
#include <string>
#include "oem.h"
int main () {
char caf[] = "Les caractères français doivent être convertis";
std::string str = "Cet été fut chaud";
std::cout << std::endl << ca("Démo de ca() n° 1 : ") << ca(caf) << std::endl;
std::cout << std::endl << ca("Démo de ca() n° 2 : ") << ca("Noëlle aperçut là-bas l'âne bâté") << std::endl;
std::cout << std::endl << sa("Démo de sa() n° 1 : ") << sa(str) << std::endl;
std::cout << std::endl << "Le texte ci-dessus a : " << sa(str).size() << ca(" caractères") << std::endl;
std::cout << std::endl << sa("Démo de sa() n° 2 : ") << sa("C'est bientôt fini !") << std::endl;
std::cout << std::endl << std::endl << "Au revoir !" << std::endl << std::endl;
getchar();
return 0;
}
Ce problème a déjà été traité, exemple : http://www.cppfrance.com/code.aspx?ID=29633
Mais ici c'est une solution plus spécialisée et plus simple. J'ai toutefois une question :
dans oem.h il y a : char* c = new char[...]; mais il n'y a nulle part un : delete [] c;
s'il en faut un, où le programmer ? Merci.