Ascii vers iso 8859-1 [Résolu]

Signaler
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
-
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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++
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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).
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

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
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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.
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
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 ;-)
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
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