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

Format d'échange (XML, JSON...) Java Discussion :

Encodage flux XML [SAX]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Encodage flux XML
    Bonjour

    Je lis un flux XML afin de le parser avec un parseur SAX. Le flux que j'utilise est Google Weather qui est encodé sous UTF-8:

    http://www.google.com/ig/api?weather=paris,france&hl=fr

    Néanmoins, même en forçant la lecture du flux, cela me donne des caractères bizarre en forme de carré.

    Voila mon code :


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLEncoder;
     
     
     
     
    public class TestEncodage {
     
    	/**
             * @param args
             * @throws IOException 
             */
    	public static void main(String[] args) throws IOException {
    		// TODO Auto-generated method stub
    		//URL à parser
    		String lien="http://www.google.com/ig/api?weather="
    				+URLEncoder.encode("paris", "UTF-8")
    				+",france&hl=fr";
     
    		//Construction du StringBuilder
    		URL url = new URL (lien);
    		BufferedReader br = null;
    		StringBuffer stringBuilder = null;
     
    		try {
    			InputStreamReader reader = new InputStreamReader (url.openConnection ().getInputStream (), "UTF-8");
    			br = new BufferedReader (reader);
    			String x = reader.getEncoding();  
                System.out.println("\nencoding is "+x);  
    		    String line = null;
    		    stringBuilder = new StringBuffer();
    		    while((line=br.readLine())!=null){
    		    	byte[] test = line.getBytes("UTF-8");
    		    	stringBuilder.append(new String(test));
    		    }
    		}
    		finally{
    			if (br != null)
    				br.close();
    		}
    		String resultat=stringBuilder.toString();
    	    System.out.println(resultat);
    	}
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Plusieurs choses à dire :

    #1 - ces histoires de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // CECI NE MARCHE PAS
    byte[] test = line.getBytes("UTF-8");
    String s = new String(test);
    Ça n'a aucun sens et ne peut rien faire de bien. Ça ne peut que causer des problèmes, mais pas apporter de solution.
    Ne le fais juste pas. Tu as eu ta String avec readLine(), garde-là.

    #2 - Chez moi, Google envoie ce document en ISO-8859-1, pas en utf-8. Du coup, il faudrait plutôt le lire en ISO-8859-1. J'ai testé, ça marche.

    #3 - Google a l'air d'envoyer ce qui lui chante, en fonction de qui a fait la requête.
    Du coup, il vaudrait mieux lire quel est l'encodage, et utiliser cet encodage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    URLConnection connection = url.openConnection();
    String charset;
    String contentType = connection.getContentType();
    Matcher matcher = Pattern.compile(".*charset\\s*=\\s*\"?'?(.*?)\"?'?").matcher(contentType);
    if(matcher.matches()) {
      charset = matcher.group(1);
    } else {
      charset = "utf-8";
    }
    InputStreamReader reader = new InputStreamReader (connection.getInputStream (), charset);
    #4 - Une bibliothèque comme HttpClient serait capable de détecter l'encodage à ta place, et de te fournir la réponse sous forme de Reader ou de String, sans que tu te soucies de chercher l'encodage toi-même.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci thelvin ça marche à fond!!


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

Discussions similaires

  1. Problème encodage flux xml (CDATA) dans String
    Par Hurricae dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 01/08/2011, 06h50
  2. [SOAP][C#]envoi d'un flux xml en SOAP
    Par prez dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 25/04/2005, 17h57
  3. [FLASH MX2004] Créer un flux xml
    Par j0hnmerrick dans le forum Flash
    Réponses: 3
    Dernier message: 23/02/2005, 12h02
  4. [XSL] Afficher un flux XML
    Par minimoi1234 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 18/02/2005, 09h35
  5. [DOM] Comment créer des flux XML en java ?
    Par nean_j dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/04/2004, 12h00

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