#1 Le 03/02/2007, à 21:52
- echantillon
[resolu]UTF-8 convertion implicite. C
Bonjour,
je suis confronté a un problème d'UTF-8 que je ne comprend pas, et que je n'arrive pas a résoudre.
Je dois copier en partie le contenu d'une chaîne buffer dans une autre donnee->radio.
La copie s'arrête quand on tombe sur le caractère ';' .
while ((donnee->radio[a++] = buffer[a++]) != ';');
Cela fonctionne, mais a l'affichage de donnee->radio les caractères accentués pêchent.
Si j' affiche buffer il n'y a pas de problèmes.
Je précise que la fonction qui me permet d'afficher les caractères provient de la librairie GTK+ (gtk_combo_box_append_text).
En attente de vous lire, je vous remercie d'avance.
Dernière modification par echantillon (Le 05/02/2007, à 05:18)
Et une chaussette de moins.
Hors ligne
#2 Le 03/02/2007, à 23:52
- gene69
Re : [resolu]UTF-8 convertion implicite. C
while ((donnee->radio[a++] = buffer[a++]) != ';');
tu es sur que ça marche? tu es sur que tu n'icrementes pas deux fois ta variable a ?
et donc que tu copies une lettre sur deux?
j'aurai plutot vu un truc comme ça: (je vérifie pas si ça marche.)
while ((donnee->radio[a++] = buffer[++a]) != ';');
Dernière modification par gene69 (Le 03/02/2007, à 23:55)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#3 Le 04/02/2007, à 00:22
- Chaussette
Re : [resolu]UTF-8 convertion implicite. C
ARghh !!
Merci gene69. Des fois on ne vois ses erreurs mais quand elles sont grossières.
j'ai remplacé :
while ((donnee->radio[a++] = buffer[a]) != ';');
(ton exemple renvoi une erreur de segmentation)
Sinon, je file m'acheter des yeux
Dernière modification par Chaussette (Le 04/02/2007, à 00:22)
Les clowns se marient en grande pompes
Hors ligne
#4 Le 04/02/2007, à 00:34
- guyver2
Re : [resolu]UTF-8 convertion implicite. C
il faut pas plutot faire
while ((donnee->radio[a] = buffer[a++]) != ';');
sinon tu copie la valeur de buffer[1] dans donnée->radio[0] et ainsi de suite non ?
Croire est le meilleur moyen de ne jamais rien savoir
Mes jeux en C/C++
Hors ligne
#5 Le 04/02/2007, à 00:41
- guyver2
Re : [resolu]UTF-8 convertion implicite. C
(apres test) : tient non, les deux font la meme chose... bizarre
Croire est le meilleur moyen de ne jamais rien savoir
Mes jeux en C/C++
Hors ligne
#6 Le 04/02/2007, à 00:41
- gene69
Re : [resolu]UTF-8 convertion implicite. C
va falloir que je révise les opérateurs.
++a ne renvoie pas a+1 sans le stoquer dans a? zut.
guyver2 a raison. j'ajouterai que j'envisagerai l'opportuniter de tester \0 ...
[résolu] ...
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#7 Le 04/02/2007, à 00:55
- Chaussette
Re : [resolu]UTF-8 convertion implicite. C
Voui, pour programmer en C il faut bien connaître les priorités et les habitudes du compilateur. Choses que moi aussi j'ai a revoir.
D'autant que tout ça me copie aussi le ';' que je ne veux pas.
Alors je pourrais rajouter une ligne pour le supprimer, ouiménon j'ais pas envie!
J'aime bien optimiser.
J'ai essayer ceci :
while ((donnee->radio[a] = buffer[a++]) != (buffer[a++] == ';'));
Mais ça me copie toute la chaîne.
Je vous met au défis d'y arriver en une ligne, chez moi les idées commencent a s'embrouiller..:)
Les clowns se marient en grande pompes
Hors ligne
#8 Le 04/02/2007, à 01:03
- gene69
Re : [resolu]UTF-8 convertion implicite. C
en trichant
do { cible[a] = source[a++]; } while (';' != source[a] );
sans tricher (à tester)
while( ( cible [ a ] = source [ a ] ) && ( ';' != source [ a ++ ] ) );
Dernière modification par gene69 (Le 04/02/2007, à 01:04)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#9 Le 04/02/2007, à 01:19
- Chaussette
Re : [resolu]UTF-8 convertion implicite. C
Alors, la tricherie elle marche
Et sinon :
while( ( cible [ a ] = source [ a ] ) && ( ';' != source [ a ++ ] ) );
ça copie toujours le point virgule!
J'ai fait :
while( ( cible [ a ] = source [ a ] ) && ( ';' != source [ a ++ +1] ) );
et ça marche !
EDIT :
Encore plus simple en fait il suffit de déplacer le ++
while( ( cible [ a ] = source [ a ++] ) && ( ';' != source [ a ] ) );
EDIT : Au fait merci
Dernière modification par Chaussette (Le 04/02/2007, à 01:29)
Les clowns se marient en grande pompes
Hors ligne
#10 Le 04/02/2007, à 14:28
- guyver2
Re : [resolu]UTF-8 convertion implicite. C
petit rappel :
a++ incrémante a et renvoi a
++a incremente a et renvoi a+1
sinon pour ton pb de ";"a la fin, comme de toute façon il te manque un '\0' en dernier caractere de donnee->radio. il suffit a la fin de ta boucle de metre '\0' a la fin de ta chaine (a la place du dernier caractère copié, a savoir ';')
while ((donnee->radio[a] = buffer[a++]) != ';');
donnee->radio[a-1] = '\0';
Croire est le meilleur moyen de ne jamais rien savoir
Mes jeux en C/C++
Hors ligne
#11 Le 04/02/2007, à 18:44
- Chaussette
Re : [resolu]UTF-8 convertion implicite. C
vi, ca j'y avais pensé.
"donnee->radio[a-1] = '\0';"
Mais merci pour les précisions, j'ai un peu appris le C a l'arrache et ça fait partit des détails que je n'ai pas pris la peine de voir .
Les clowns se marient en grande pompes
Hors ligne