Remplacer accents pour utilisation console

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 - 1 févr. 2006 à 14:47
 Liteon14000 - 21 avril 2014 à 20:27
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

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
1 févr. 2006 à 15:00
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++;
}
}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 févr. 2006 à 15:10
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++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
1 févr. 2006 à 15:28
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
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
1 févr. 2006 à 18:43
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 ^^
0
Rejoignez-nous