Detection de caracteres OEM

Signaler
Messages postés
17
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
28 janvier 2011
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Salut,

J'ai un buffer (char*) qui me contient soit des chaines ANSI soit des chaines OEM

si c'est des OEM, je les transforme en ANSI avec OemToChar

Probleme: comment puis je detecter que ma chaine est deja en ANSI et ne pas la convertir avec OemTochar dans ce cas ?

en bref je cherche a faire deux fonctions

BOOL isAnsi(char *_string) et BOOL isOEM(char *_string)

Des idees pour faire ces fonctions ?

Merci ;)

1 réponse

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Par ANSI, j'imagine que tu parles de Windows-1252 (Windows européen) et par OEM, j'imagine que tu parles de la page 850 (DOS européen).

Dans le cas général, il n'y a pas de solution à ton problème.

Mais tu peux quand même essayé de deviner.

Déjà, ces deux jeux de caractères ont beaucoup de glyphes ayant la même valeur (a..z, A..Z, @, %, ...). En fait, la plupart des caractères dans l'interval 0..127 sont communs et sont en fait proche du vrai ASCII. Si une chaîne est uniquement composé de ces caractères commun, tu ne peux pas savoir si c'est du 1252 ou du 850, mais ce n'est pas grave : OemToChar n'aurait aucun effet dessus.

Ensuite, si tu es en France, ce que tu risques d'avoir, c'est des caractères accentués.
Par exemple, si tu trouves 0xE9 dans une chaîne.
1) En 1252, le glyphe est "é".
2) En 850, le glyphe est Ú (U majuscule avec accent aigu).

Il y a peut de chance pour que le caractère U majuscule avec accent aigu soit utilisé en France. Donc si tu trouves 0xE9 dans une chaîne, il y a de bonne chance pour que ce soit du 1252.

Avec le raisonnement inverse, si tu trouves 0x82, le "é" du DOS, il y a de bonne chance que ce soit du OEM.

Tu peux ainsi analyser tous les caractères de la chaîne pour voir si la valeur a plus de chance d'être du 1252 ou du 850.

Et si ou bout de ça, tu as 50 caractères communs, 23 plutot 1252 et 3 plutôt 850, tu peux espérer que la chaîne soit bien une 1252.