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

Langage Java Discussion :

Caractères spéciaux / Java parsing JSON


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 398
    Par défaut Caractères spéciaux / Java parsing JSON
    Bonjour,

    j'essaie depuis peu d'attaquer un webservice sur le net, qui me retourne un résultat Json.
    En parsant ça en Java, je me suis rendu compte que le format retourné n'était pas standard, j'ai des caractères spéciaux qui s'affichent dans mon IHM présentant le résultat de la requête.

    voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    url = new URL(purl);
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("Accept-Charset", "ISO-8859-1");
    conn.setDoOutput(true);
    writer = new OutputStreamWriter(conn.getOutputStream());
    writer.flush();
    reader = new BufferedReader(new InputStreamReader(
    conn.getInputStream()));
    String ligne = "";
    while ((ligne = reader.readLine()) != null) {
    	result = result + ligne;
    }
    que faut-il rajouté pour avoir du standard et pas de caractères spéciaux dans la réponse ?

    merci pour votre aide

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par franck06 Voir le message
    que faut-il rajouté pour avoir du standard et pas de caractères spéciaux dans la réponse ?
    C'est à dire ??? Quels caractères spéciaux ?



    Sinon :
    • Utilises des try/finally pour libérer proprement tes flux (ou des try-with-ressources si tu es sous Java 7)
    • Ne concatène pas des String dans une boucle !!!
      Utilises un StringBuilder à la place... et fait une lecture par bloc (la lecture par ligne est complètement inutile ici)
    • Tu ne précises pas l'encodage lorsque tu lis la réponse, cela risque de te poser des problèmes (c'est peut-être cela que tu appelles "caractères spéciaux").



    a++

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Par défaut
    Citation Envoyé par franck06 Voir le message
    Bonjour,

    j'essaie depuis peu d'attaquer un webservice sur le net, qui me retourne un résultat Json.
    En parsant ça en Java, je me suis rendu compte que le format retourné n'était pas standard, j'ai des caractères spéciaux qui s'affichent dans mon IHM présentant le résultat de la requête.

    voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    url = new URL(purl);
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("Accept-Charset", "ISO-8859-1");
    conn.setDoOutput(true);
    writer = new OutputStreamWriter(conn.getOutputStream());
    writer.flush();
    reader = new BufferedReader(new InputStreamReader(
    conn.getInputStream()));
    String ligne = "";
    while ((ligne = reader.readLine()) != null) {
    	result = result + ligne;
    }
    que faut-il rajouté pour avoir du standard et pas de caractères spéciaux dans la réponse ?

    merci pour votre aide


    Lorsque tu utilises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn.setRequestProperty("Accept-Charset", "ISO-8859-1");
    Tu signales au WS que tu souhaites recevoir la réponse dans l'encoding "ISO-8859-1".
    Le WS t'envoie donc une String encodée en "ISO-8859-1"

    Mais lorsque tu créé le reader de la réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reader = new BufferedReader(new InputStreamReader(
    conn.getInputStream()));
    Tu ne spécifies pas le charset a utiliser à l'InputStreamReader, qui par défaut utilise le Charset configuré au niveau de ta JVM.

    Il faut donc que tu utilises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reader = new BufferedReader(new InputStreamReader(
    conn.getInputStream(),"ISO-8859-1"));
    A noter qu'aujourd'hui l'encodage UTF-8 est plus courant et qu'il existe des constantes pour les charsets plutôt que des strings:
    http://docs.oracle.com/javase/1.5.0/...t/Charset.html

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/12/2014, 10h00
  2. Parsing en java, caractère spéciaux
    Par dumbl dans le forum Langage
    Réponses: 9
    Dernier message: 30/09/2013, 00h49
  3. affichage des caractères spéciaux sous java
    Par hasnaouiwafa dans le forum Général Java
    Réponses: 2
    Dernier message: 03/04/2007, 17h23
  4. [Java] XMLWriter - caractères spéciaux
    Par Bowa dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 13/04/2006, 16h42
  5. Parsing et caractères spéciaux
    Par Shogun dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/10/2004, 17h43

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