A propos des accents en C

Le
Tanoor
Bonjour,
je dois développer une application cliente en C qui se connecte à un
serveur, et lui envoie le contenu d'un fichier texte.

Pour cela, je crée une socket et j'envoie "N" octets au serveur(N
étant la taille de mon fichier). L'ennuie est que mon fichier
comporte des accents. Du coup, le nombre de caractères de mon fichier,
ne correspond pas au nombre d'octets de celui-ci.

write(socket, mon_buffer, la_taille_de_mon_buffer);

Ma question est donc la suivante: comment faire en sorte d'envoyer
exactement le nombre d'octets correspondant à mon fichier.

Merci d'avance,
foodige.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Samuel Devulder
Le #21086851
Tanoor a écrit :
Bonjour,
je dois développer une application cliente en C qui se connecte à un
serveur, et lui envoie le contenu d'un fichier texte.

Pour cela, je crée une socket et j'envoie "N" octets au serveur(N
étant la taille de mon fichier). L'ennuie est que mon fichier
comporte des accents. Du coup, le nombre de caractères de mon fichier,
ne correspond pas au nombre d'octets de celui-ci.

write(socket, mon_buffer, la_taille_de_mon_buffer);

Ma question est donc la suivante: comment faire en sorte d'envoyer
exactement le nombre d'octets correspondant à mon fichier.

Merci d'avance,
foodige.



Je ne comprends pas.. un fichier est un fichier.. Si ton fichier fait
1024 octets sur disque, alors je ne vois pas pourquoi il faudrait
transmettre 1024+quelquechose sur la socket.

Comment détermine tu la taille du fichier à transmettre?

Tu utilises stat() ou un comptage lettre à lettre?

Si c'est un comptage lettre à lettre avec un encodage spécifique (utf-8
par exemple) et une API dédiée, il faut savoir que tu peux recevoir 1
seule lettre de l'api alors qu'on en a lu plusieurs sur disk. Le
comptage est donc nécessairement faux!

Similairement si tu tu veux envoyer un texte dans un autre encodage que
celui de ton fichier disque, il se peut qu'un char disk se traduise par
plusieurs chars dans l'encodage attendu par le destinataire.

==> Bref il faut tenir compte de l'encodage lors des échanges entre
octets et lettres.

Dans les langages plus récent (java par ex) on distingue les bytes
(octets) des char (lettres) car les deux ne sont pas équivalents et
chacun a son API de fichier dédiée (stream pour les bytes, et writer
pour les char en gros).

sam.
Tanoor
Le #21089051
On 29 jan, 23:25, Samuel Devulder wrote:
Tanoor a écrit :



> Bonjour,
> je dois développer une application cliente en C qui se connecte à u n
> serveur,  et lui envoie le contenu d'un fichier texte.

> Pour cela, je crée une socket et j'envoie "N" octets au serveur(N
> étant la taille de mon fichier). L'ennuie est que  mon fichier
> comporte des accents. Du coup, le nombre de caractères de mon fichier ,
> ne correspond pas au nombre d'octets de celui-ci.

> write(socket, mon_buffer, la_taille_de_mon_buffer);

> Ma question est donc la suivante: comment faire en sorte d'envoyer
> exactement le nombre d'octets correspondant à mon fichier.

> Merci d'avance,
> foodige.

Je ne comprends pas.. un fichier est un fichier.. Si ton fichier fait
1024 octets sur disque, alors je ne vois pas pourquoi il faudrait
transmettre 1024+quelquechose sur la socket.

Comment détermine tu la taille du fichier à transmettre?

Tu utilises stat() ou un comptage lettre à lettre?

Si c'est un comptage lettre à lettre avec un encodage spécifique (utf -8
par exemple) et une  API dédiée, il faut savoir que tu peux recevoi r 1
seule lettre de l'api alors qu'on en a lu plusieurs sur disk. Le
comptage est donc nécessairement faux!

Similairement si tu tu veux envoyer un texte dans un autre encodage que
celui de ton fichier disque, il se peut qu'un char disk se traduise par
plusieurs chars dans l'encodage attendu par le destinataire.

==> Bref il faut tenir compte de l'encodage lors des échanges entre
octets et lettres.

Dans les langages plus récent (java par ex) on distingue les bytes
(octets) des char (lettres) car les deux ne sont pas équivalents et
chacun a son API de fichier dédiée (stream pour les bytes, et writer
pour les char en gros).

sam.



Salut Sam,
je n'ai pas dû être clair mais tu as quand même répondu à ma
question :)
En fait, effectivement, je faisais un comptage lettre à lettre. Je
savais que c'était l'origine de mon problème mais je ne savais pas
comment le résoudre.
Je ne connaissais tout simplement pas la fonction stat.
Avec cette fonction, mon problème est réglé.

Merci beaucoup,
Tanoor.
Publicité
Poster une réponse
Anonyme