Ascii vers iso 8859-1

Résolu
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 - 15 juil. 2007 à 21:18
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 - 16 juil. 2007 à 10:11
bonjour a tous,

je recupere dans un fichier un chaine de caracteres avec des caracteres du genre  Stéréo
en fait c'est le mot stéréo qu'il me met ainsi. le fichier, je le recupere sur le net et j'essaie de l'afficher normalement (avec les caracteres latins).
ma question est donc de savoir comment faire pour convertir ces hiéroglyphes en caracteres bien de chez nous ?

merci de votre aide

ps: je suis sous visual studio 2005 et mon projet est en c++ et multi byte, pas en unicode.

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 juil. 2007 à 23:37
devrait aller ainsi:

DWORD __stdcall RemplaceBizzare(BYTE *pbuf, DWORD len)
{
  BYTE *c, *d;
  if(!len) return 0;
fromBUFF:
  *d = *c;
  if(*c == 'Ã') {
    if(len > 1) {      if(*(c+1) '©') {*d 'é'; c++; len--;}
    }
  }
  d++; c++;
  if(--len) goto fromBUFF;
  return (d - pbuf);
}

ciao...
BruNews, MVP VC++
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
16 juil. 2007 à 00:07
Salut,

Petit exemple juste pour stéréo, a adapter:

char tab[200] = "stéréo";

wchar_t wtab[200];

MultiByteToWideChar(CP_UTF8, 0, tab, -1, wtab, 200);

WideCharToMultiByte(CP_ACP, 0, wtab, -1, tab, 200, NULL, NULL);

MessageBoxA(NULL, tab, "", 0);

Le mieux c'est quand même de coder en unicode, a mon avis, surtout si
tu es ammené a gerer des fichiers codés en utf-8 (ou en autre chose).
3
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
16 juil. 2007 à 08:54
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;
}

En esperant t'etre utile...
Ciao
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
15 juil. 2007 à 22:05
Salut,

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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 1
15 juil. 2007 à 23:09
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 ;-)
0
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 1
16 juil. 2007 à 10:11
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
0
Rejoignez-nous