Remplacer accents pour utilisation console

Signaler
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
-
 Liteon14000 -
Bonjour,

Je lis des données depuis un fichier texte oridinaire, donc contenant des accents é è à ù ï î ê û etc, non affichables sur la console.
Existe-t-il une fonction qui remplace ces caractères non commun par leur équivalent simple le plus proche ({é,è,ë,ê}->e, {ù,û,ü}->u, etc) ?

C'est facile à refaire mais s'il existe déja une fonction...

Merci

5 réponses

Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
En gros un truc du genre mais avec toutes les possibilités.

// KillAccents
void KillAccents(char *pStr)
{
while (*pStr)
{
switch (*pStr)
{
// Low case
case 'à':
case 'â':
case 'ä':
*pStr = 'a';
break;
case 'é':
case 'è':
case 'ë':
case 'ê':
*pStr = 'e';
break;
case 'î':
case 'ï':
*pStr = 'i';
break;
case 'ô':
case 'ö':
*pStr = 'o';
break;
case 'ù':
case 'û':
case 'ü':
*pStr = 'u';
break;
case 'ç':
*pStr = 'c';
break;
case 'ñ':
*pStr = 'n';
break;

// Upper case
case 'Â':
case 'Ä':
*pStr = 'A';
break;
case 'Ê':
case 'Ë':
*pStr = 'E';
break;
case 'Î':
case 'Ï':
*pStr = 'I';
break;
case 'Ô':
case 'Ö':
*pStr = 'O';
break;
case 'Û':
case 'Ü':
*pStr = 'U';
break;

case 'Ñ':
*pStr = 'N';
break;
}

pStr++;
}
}
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Le principe est là mais faudrait vérifier si le compilo fait du bon boulot, m'étonnerait sur pareille func.

Faudrait sauter direct au pStr++ selon plage de valeurs sans lui faire tester tous les cas, par exemple sous 138 me semble inutile de tout tester.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
La console est tout a fait capable d'afficher des caractères accentués.

Par exemple :

printf("Il \202tait une fois un petit caperon rouge...");

Shell
Messages postés
54
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
4 avril 2007

bonjour,

CharToOem() pour convertir OEM vers char, c'est pas une erreur!
OemToChar() pour l'inverse.

// buffer d'un fichier txt
unsigned char tab[] = {0x61, 0xe0, 0xe9, 0xe8, 0xea, 0xe2, 0xee, 0xef, 0xe7, 0xf9, 0};

CharToOem(tab, tab);

printf("%s", tab); // affiche aàéèêâîïçù dans la console

y'a aussi CharToOemBuff(), pour les chaînes sans 0 final

bye.
Il y a beaucoup plus simple:

1 - Inclue "locale"
#include <locale

2 - Ajoute cette ligne au début de la fonction main()
setLocale(LC_ALL,"");

Cela devrait marcher à merveille :D

PS: et oui je sais, ce sujet est de 2006 ^^