UTF8 TO ISO 6937: WideCharToMultiByte prob
Bonjours a tous.
Mon problème est le suivant:
Pour des raisons de compatibilités je dois convertir du text UTF8 en iso 6937-2 "Coded character sets for text communication"
J'ai donc fait une jolie fonction de conversion en utilisant WideCharToMultiByte (cf. ci après). Et ça marche bien pour tous les identifieurs de page exceptés - évidemment - celle qui m’intéresse c.a.d la 20269 (qui correspond a iso 6937. Pas le 2 mais je n’ai pas trouvé mieux).
J'ai essayé de changer les options mais rien n'y fait.
Si quelqu'un a une idée ça serait vraiment génial car la je sèche un peu.
Merci d'avance
alain.
PS: si quelqu'un sait faire ce genre dans un autre langage je suis preneur également ;)
---
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
string codageDataUTF8_TO_ISOX(int code, LPCSTR csUTF8)
{
try {
int lenUTF8 = (int)strlen(csUTF8);
wchar_t wc[MAXWIDECHAR];
memset(wc,0,MAXWIDECHAR*sizeof(wchar_t));
//UTF8 -> WIDECHAR
int iRet= MultiByteToWideChar(
CP_UTF8, // code page
MB_ERR_INVALID_CHARS, //0, // character-type options
csUTF8, // string to map
lenUTF8, // number of bytes in string
wc, // wide-character buffer
MAXWIDECHAR-1 // size of buffer
);
if (!iRet){
// display error
// ...bla bla..
return "";
}
// WIDECHAR -> code
int lenWC = (int)wcslen(wc);
char c[MAXISOCHAR];
memset(c,0,MAXISOCHAR);
//LPCSTR p="\x27";
LPCSTR p="'";
iRet=WideCharToMultiByte(
code, // code page-
0, // performance and mapping flags
wc, // wide-character string
lenWC, // number of chars in string
c, // buffer for new string
MAXISOCHAR-1, // size of buffer
p, // NULL, // default for unmappable chars
NULL // set when default char used
);
if (!iRet){
// display error
// ...bla bla..
return "";
}
return c;
}
// catch
// ....bla bla
catch (...) //to be sure
{
// ....bla bla
}
} |