mcallan
Messages postés17Date d'inscriptionmardi 6 mai 2003StatutMembreDernière intervention28 janvier 2011
-
27 avril 2010 à 10:56
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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)
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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.