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

Entrée/Sortie Java Discussion :

[Réseau]Problème de décodage de caractère


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut [Réseau]Problème de décodage de caractère
    Bonjour,
    J'ai un petit problème pour récupérer du texte correctement sur une socket.
    En effet je lis sur ma socket en ligne par ligne grace à un BufferedReader et je fais un append dans un StringBuffer (en rajoutant le "\n" qui a sauté) en détectant un "." tout seul sur une ligne (dans ce cas j'arrête de lire). J'écris le contenu de mon stringBuffer dans un fichier et en faisant un diff du fichier d'origine et du fichier obtenu, il ya des différences. Mon fichier d'origine contient n'importe quel caractère mais est composé de lignes de 128 caractères, pas forcement des caractères imprimables.
    Que dois je faire pour que mon fichier de sortie soit exactement le même chose que dans mon fichier original

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Le programme emetteur est ecrit en Java aussi ?

    Sinon montre le code de ta boucle de lecture, on y verra un peu plus clair.

    Si tu as le code qui ecrit sur la socket c'est bien aussi

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    non l' emetteur est un server de news quelconque (ici free).
    voici le code correspondant à ma boucle de lecture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
             pIn = new BufferedReader(new InputStreamReader(gSocket.getInputStream()));
            StringBuffer mRetrun = new StringBuffer();
            String mStr;
            while (!(mStr = pIn.readLine()).equals(END_TEXT)) { // END_TEXT == "."
                mRetrun.append(mStr);
                mRetrun.append("\n");
            }
            return mReturn;
    le texte que j'essaye de récupérer est une news encodée à l'aide d'yencode et je dois la décoder. Je récupère un fichier (que j'appelle "original") grâce à la sortie de telnet, je le passe par mon désencodeur: tout se passe bien. Si je le fais sur le fichier que j'ai généré grâce a mon java ca se passe mal et si a premiere vue les deux fichiers on l'air identique, un diff me montre l'inverse et un hex-dump me le confirme.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Voila un exemple de différence:

    Mon fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    00000090: 2a93 978b 913f 5994 9a91 2a2a 2a29 0229  *....?Y...***).)
    000000a0: 3d4a 2a3a 7470 7370 2a2b 2c2a 2a8e 2a8e  =J*:tpsp*+,**.*.
    000000b0: 2a2a 2916 2a3b 6e9f 3f95 a32a 2b2a 2e2a  **).*;n.?..*+*.*
    000000c0: 2a2a 662a 2a29 182a 386b 8e99 8c3f 2a8e  **f**).*8k...?*.
    000000d0: ea2a 2a2a 2b29 052a ae2a 302e 2e2e 2f2e  .***+).*.*0.../.
    000000e0: 302f 2f30 3330 2f30 3335 3230 3032 3536  0//030/035200256
    Le fichier qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    00000090: 2a93 978b 918f 5994 9a91 2a2a 2a29 0229  *.....Y...***).)
    000000a0: 3d4a 2a3a 7470 7370 2a2b 2c2a 2a8e 2a8e  =J*:tpsp*+,**.*.
    000000b0: 2a2a 2916 2a3b 6e9f 8d95 a32a 2b2a 2e2a  **).*;n....*+*.*
    000000c0: 2a2a 662a 2a29 182a 386b 8e99 8c8f 2a8e  **f**).*8k....*.
    000000d0: ea2a 2a2a 2b29 052a ae2a 302e 2e2e 2f2e  .***+).*.*0.../.
    000000e0: 302f 2f30 3330 2f30 3335 3230 3032 3536  0//030/035200256
    On voit bien que le résultat est presque mon mais en regardant de plus pres...

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Il me remplace certains caractères par "?" (3f)

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Pourquoi lors de la lecture des bytes dans un flux (puis ecriture dans un fichier), java remplace certain byte par un "?" plutot que de garder la vraie valeur ?

  7. #7
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    ça ne viendrait pas de ta façon de lire sur ta socket ? Peut-être que le transfert se fait en mode binaire et dans ce cas là il faudrait utiliser un tableau de byte ?!

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Java ne remplace pas la valeur, c'est qu'il utilise un autre codage de caractere. Tu devrais decoder le flux recu en UTF-8 ou tout autre codage utilise par le serveur de news.
    Romain Guy
    Android - Mon livre - Mon blog

Discussions similaires

  1. Problème d'affichage des caractères accentués
    Par ostaquet dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 06h58
  2. [Réseau] Problème socket
    Par neenee dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 18/01/2005, 15h26
  3. [FLASH MX2004] Problème de reconnaissance des caractères
    Par Spikefreeman dans le forum Flash
    Réponses: 10
    Dernier message: 04/01/2005, 23h08
  4. Réponses: 3
    Dernier message: 11/10/2004, 17h26
  5. Problème de chaîne de caractères (BSTR)
    Par patvdb dans le forum MFC
    Réponses: 2
    Dernier message: 26/02/2004, 15h44

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