J'ai deux petites fonctions qui fonctionnent tres bien chez moi ( ca va dans la continuité de se qui a été proposé precedemment...) :
// cette fonction permet de convertir une chaîne ANSI en UniCode
// en entrée : chaîne en ANSI
// return la chaîne en UniCode.
unsigned short* ConvertAnsiToUnicode(char* szAnsi)
{
//Trouver la taille finale pour réserver le buffer
int Size = MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0) ;
LPWSTR wUnicode = new WCHAR[Size];
//effectuer la conversion
MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, wUnicode, Size) ;
return wUnicode;
}
// cette fonction permet de convertir une chaîne UniCode en ANSI
// en entrée : la chaîne en UniCode.
// return chaîne en ANSI
char* ConvertUnicodeToAnsi(TCHAR* wUnicode)
{
int bTemp=(sizeof(wUnicode)/sizeof(TCHAR));
int Size = WideCharToMultiByte(CP_ACP, 0, wUnicode, -1, NULL, 0, NULL, &bTemp) ;
LPSTR szAnsi = new char[Size];
WideCharToMultiByte(CP_ACP, 0, wUnicode, -1, szAnsi, Size, NULL, &bTemp) ;
return szAnsi;
}
Vu la tête de 'stéréo', ton fichier a plutot l'air d'etre codé en UTF-8.
Je pense pas qu'il existe de fonction pour passer direct d'UTF-8 en
multibyte, donc je te suggere de passer par unicode avec
MultiByteToWideChar et WideCharToMultiByte.
Vous n’avez pas trouvé la réponse que vous recherchez ?
merci de ta reponse.
en effet j'ai essayé comme tu as dit, d'abord passé le buffer en wide char, puis le ramener en multibyte; mais ca ne fonctionne pas.
j'ai essayé avec CP_ACP et meme avec UTF8, rien a faire.
donc je suis ouvert a toute autre proposition ;-)
MERCI de vos réponses les gars !!!
j'avoue que la solution de aardman est la plus simple. mon erreur venait du fait que je mettais cp_acp ou cp_utf8 dans les deux conversions, au lieu de mettre cp_utf8 pour le multibyte vers le wide char, et cp_acp pour le retour au multibyte.
merci encore les gars, vous etes trop sympa.
ps: faudrait que je mette vraiment à programmer en unicode. je dois perdre l'habitude de la programmation en multibyte. il ya pas que l'anglais dans le monde