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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
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