Detection de caracteres OEM

mcallan Messages postés 17 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 28 janvier 2011 - 27 avril 2010 à 10:56
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 2 mai 2010 à 09:08
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

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 mai 2010 à 09:08
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.
0
Rejoignez-nous