Bonjour !
J'ai écrit une fonction qui convertit une chaîne de iso 8859-1 vers utf-8.
Mais j'ai un gros problème de longueur de chaîne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 int iso88591ToUtf8(const char * capSrc, int iSrcLen, char * capDest) { int iUtfLen=0; int i; for(i = 0 ; i<iSrcLen ; i++){ if(capSrc[i] < 0) { capDest[iUtfLen] = 0xc0 | ((capSrc[i] >> 6) & 0x03); //printf("%x\n", capDest[iUtfLen]); iUtfLen++; capDest[iUtfLen] = 0x80 | (capSrc[i] & 0x3f); //printf("%x\n", capDest[iUtfLen]); iUtfLen++; }else{ capDest[iUtfLen] = capSrc[i]; //printf("%c", capDest[iUtfLen]); iUtfLen++; } } capDest[iUtfLen] = '\0'; return iUtfLen; }
Par exemple si je rentre une chaîne qui ne sera pas modifié (tous les caractères passe dans le "else"), et que j'affiche les caractères un par un avec le printf commenté, pas de problème, j'ai l'exacte copie de la chaîne entrante.
Mais si j'affiche la chaîne capDest après être sorti de la fonction, ca me fait des trucs bizarre.
Par exemple pour "C:\Documents and Settings\User\Bureau\truc", j'obtiens quelque chose comme "C:\Documents and Settings\User\Bureau\trucd" et c'est aléatoire selon les chaînes, il peut y avoir plusieurs caractères en trop, et des caractères bizarre aussi.
Si j'utilise le printf("%c", capDest[iUtfLen]) dans la fonction pas de problème.
Bref je ne comprends pas pourquoi ca marche très bien caractère à caractère et pas avec une chaîne.
Merci d'avance pour vos réponses.
Partager