Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/02/2007, à 22: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, à 06:18)


Et une chaussette de moins.

Hors ligne

#2 Le 04/02/2007, à 00: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 04/02/2007, à 00: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, à 01:22

Chaussette

Re : [resolu]UTF-8 convertion implicite. C

ARghh !! big_smile

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 wink

Dernière modification par Chaussette (Le 04/02/2007, à 01:22)


Les clowns se marient en grande pompes

Hors ligne

#4 Le 04/02/2007, à 01: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, à 01: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, à 01: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, à 01: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, à 02: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, à 02: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, à 02:19

Chaussette

Re : [resolu]UTF-8 convertion implicite. C

Alors, la tricherie elle marche smile

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 wink

Dernière modification par Chaussette (Le 04/02/2007, à 02:29)


Les clowns se marient en grande pompes

Hors ligne

#10 Le 04/02/2007, à 15: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, à 19: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