IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Encodage des string sur une socket


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Par défaut Encodage des string sur une socket
    Slt, j'ai créé un client Qt réseau en C++ et un serveur réseau en C#. (Le problème vient du coté client d'où le post dans la catégorie C++). Le problème c'est quand j'envoie une string sur la socket, j'ai beau l'encoder en Utf8 lors de l'écriture et lors de la lecture, dans les deux cas, ça me mets n'importe quoi dès qu'il y a des caractères spéciaux ! Quelqu'un saurait-il d'où cela pourrait-il venir ?

    Voici mon code en C++ : (client)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	QByteArray paquet;
    	QDataStream out(&paquet, QIODevice::WriteOnly);
     
    	QString messageAEnvoyer = "€#$%éà";
     
    	QByteArray chaine = messageAEnvoyer.toUtf8 ();
    	out << qToBigEndian((quint64) chaine.size());
     
    	socket->write(paquet); // On envoie le paquet
    	socket->write(chaine);
    Serveur (C#) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	Encoding enc = Encoding.UTF8;
    	ulong Taille = BR.ReadUInt64();
     
    	string Str = enc.GetString(BR.ReadBytes((int)Taille));
     
    	Console.WriteLine(Str);
    Merci d'avance !

  2. #2
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    C'est possible d'avoir le texte en sortie (ce que récupère le serveur) correspondant à la chaîne dans le code? Comme ça on pourra voir un peu mieux ce qui se passe.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Par défaut
    Pour ce code, je reçois ça :

    €#$%éÃ

    J'ai également remarqué que quand je mets des caractères spéciaux dans des QLabel, titres de pages, etc, avec Qt, il mes les affiche bizarement aussi ! Peut-être est-ce lié ?

    Merci d'avance !

  4. #4
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Citation Envoyé par barbug Voir le message
    Pour ce code, je reçois ça :

    €#$%éÃ
    Là c'est que la string en sortie est interprétée comme du latin-1(5). Enfin au moins affichée en latin-1. Je me demande si c'est pas au niveau du Console.WriteLine() que c'est mal encodé, une console (cmd) windows n'étant pas en utf-8 par défaut.

    Regarde ce lien de la doc doc, pour voir si c'est bien la console la cause du problème.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Par défaut
    C'est sous linux... Comment faire pour le voir autrement ? Car C# ne propose pas de décodage en latin1... Qt propose le codage mais si je peux pas le décoder, c'est ennuyeux !

    Merci d'avance !

    EDIT : J'ai modifié l'encodage de sortie de la console et toujours le même problème. Nouvelle sortie :

    €#$%éÃ

    Merci d'avance !

  6. #6
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Citation Envoyé par barbug Voir le message
    C'est sous linux...
    Le serveur est sous linux, en C# ?

    Enfin, regarde le lien que j'ai rajouté à mon commentaire précédent pour spécifier l'encodage de la console. De toute façon la chaine doit bien être en utf-8, donc pas de problème pour s'en servir, je pense, je sais pas comment sont gérées les string en C#.

    EDIT: j'ai vu pour l'essai en changeant l'encodage de la console.

    Essaie peut-être sur le forum C#. Moi je vais plus être de grand secours si ça touche au C#.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Par défaut
    Je vais créer un nouveau post pour cette nouvelle question qui s'éloigne pas mal de celle de base.

    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encodage d'int sur une socket
    Par barbug dans le forum Qt
    Réponses: 4
    Dernier message: 07/02/2009, 14h29
  2. Réponses: 2
    Dernier message: 26/06/2007, 16h04
  3. Obtenir des infos sur une page web en ligne
    Par Logan_Cale dans le forum Web & réseau
    Réponses: 1
    Dernier message: 20/08/2005, 15h36
  4. Comment avoir des information sur une BD?…
    Par kikimnet dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/02/2005, 09h20
  5. Recupération des selections sur une DBGrille multi Selection
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/11/2004, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo