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

Services Web Java Discussion :

conversion string / byte


Sujet :

Services Web Java

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut conversion string / byte
    Bonjour,
    j'ai un soucis de conversion de données.

    J'ai un web services, qui se connecte lui même via une urlconnection à un autre site pour récupérer un document.
    Ce second site renvoie un flux, que je lis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String inputLine;
    String bigInput="";
    dis=new DataInputStream(urlConnection.getInputStream());
    while ((inputLine = dis.readLine()) != null) {
    	bigInput=bigInput+inputLine;
    }
    dis.close();
    Et je renvoie un flux binaire (byte[]).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          return bigInput.getBytes("utf-8");
    Du côté client, je reçois un flux binaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fos = new FileOutputStream(new File("C:/test.pdf"));
    p = new PrintStream( fos );
    String temp=new String(result2,"utf-8");
    p.print(temp);
    Le problème est le suivant.
    D'une part dans les données reçues tous les caractères un peu spéciaux sont remplacés par un ?.
    Du coup, impossible le fichier s'ouvre mal (notamment quand il comporte des images)
    Quelqu'un aurait une idée? Faut il jouer sur le charset?

    merci d'avance

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par thyshimrod Voir le message
    D'une part dans les données reçues tous les caractères un peu spéciaux sont remplacés par un ?.
    Tu vois ça où?

    Citation Envoyé par thyshimrod Voir le message
    Du coup, impossible le fichier s'ouvre mal (notamment quand il comporte des images)
    Les images n'ont pas de charset... (du coup je n'ai pas compris ce que tu voulais dire)

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    C'est du transfert de pdf dont il s'agit.
    J'ai ouvert le pdf avec un éditeur de texte, et je l'ai comparé au transfert de bytes que j'ai mis sous forme de fichier.

    La différence se fait pour une certaine catégorie de données qui ressemblent à des carrés noirs avec des lettres à l'intérieurs, et qui sont transformés en ?, dans ce qui est reçu.

    Ces zones du pdf correspondent à des images dans le pdf.

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    En fait, c'est juste des carrés noirs tout court. tout le reste passe bien

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Si tu transfères des données qui ne sont pas du texte, il ne faut pas utiliser de flux de texte, mais uniquement des flux de données... Il ne faut pas non plus convertir ces byte[] en String...

    Donc DataInputStream/DataOutputStream uniquement, pas de String, pas de PrintStream...

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Voilà qui est mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dis=new DataInputStream(urlConnection.getInputStream());
     
    ByteArrayOutputStream myBAOS=new ByteArrayOutputStream();
     
    byte b=0;
    while((b=dis.readByte())!=-1){
         myBAOS.write(b);
    }
     
    FileOutputStream fos = new FileOutputStream(new File("C:/test5.pdf"));
    fos.write(myBAOS.toByteArray());
    fos.close();
    L'intérieur de mon fichier correspond mieux à ce que j'attends, sauf que le fos.write pète, au tiers du fichier en sortie, sur un caractère ÿy.
    Quand j'affiche une exception (IOException), le e.getMessage me renvoie null...

    ...
    ...

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    le printstackMessage est plus parlant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    java.io.EOFException
            at java.io.DataInputStream.readByte(Unknown Source)
            at com.mine.webservices.getDocumentContent.getContentWithAttachement(getDocumentContent.java:446)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
            at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
            at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
            at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
            at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
            at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
            at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
            at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
            at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
            at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
            at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java
    :664)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
            at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
            at java.lang.Thread.run(Unknown Source)
    en fait c'est le readByte qui bute...

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    si je met un inputStream au lieu d'un dataInputStream, je n'ai plus d'exception. Par contre, il ne dépasse pas les 3000 caractères lus...
    Et s'arrête toujours à ces fatidiques caractères.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    au lieu de faire un read, byte à byte, j'ai la chance d'avoir l'information par ailleurs de la taille du fichier, donc je fais un readfully sur le stream, et là, ô joie, cela fonctionne.

    Par contre, si vous avez quand même une résolution à me proposer cela me plairait.

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

Discussions similaires

  1. conversion string byte[]
    Par koukou11 dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 31/03/2011, 02h57
  2. [JAVA] mystere de conversion string - byte[ ]
    Par thotoss dans le forum Langage
    Réponses: 3
    Dernier message: 11/03/2010, 10h22
  3. Conversion String -> byte[] d'une adresse IP
    Par adn013 dans le forum Langage
    Réponses: 3
    Dernier message: 20/08/2007, 16h02
  4. Conversion string byte
    Par tikismoke dans le forum VB.NET
    Réponses: 1
    Dernier message: 21/05/2007, 14h07
  5. Conversion String en Hexa ("1F") vers byte
    Par ducseb dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2006, 20h03

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