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

avec Java Discussion :

Récupérer le contenu d'un site dans un String avec le bon encodage


Sujet :

avec Java

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

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut Récupérer le contenu d'un site dans un String avec le bon encodage
    Bonjour,

    je souhaite récupérer le contenu d'une page web pour le mettre dans un String.
    Voici une méthode que j'ai trouvé sur internet :

    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
    /**
             * Méthode permettant d'aspirer le contenu d'un site.
             * 
             * @param url url du site
             * @return contenu sous forme de chaines de caractères.
             */
    	private static String getData(URL url) { 
    		// La fonction pour récupérer le code source de la page...
    		URLConnection conn = null;
    		InputStreamReader in;
    		BufferedReader data;
    		String line;
    		StringBuffer buf = new StringBuffer();
    		try {
    			conn = url.openConnection();
    			conn.connect();
    			in = new InputStreamReader(conn.getInputStream());
    			data = new BufferedReader(in);
    			while ((line = data.readLine()) != null)
    				buf.append(line + "\n");
     
    			return buf.toString();
    		} catch (IOException e) {
    			throw new RuntimeException(e);
    		}
    	}
    Si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    URL http = new URL("http://www.lequipe.fr/");
     
    		String fluxHtml = getData(http);
    		System.out.println("page web : " + fluxHtml);
    le contenu de la page web s'affiche bien.

    Par contre, avec l'URL http://fr.wikipedia.org/wiki/Commune...a_Haute-Vienne, tous les caractères sont encodés bizzarement.
    Voici le contenu de ma console (cf. capture d'écran http://www.servimg.com/image_preview.php?i=6&u=12014371) alors que via mon navigateur, j'obtiens un contenu de page commençant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<meta http-equiv="Content-Style-Type" content="text/css" />
    		<meta name="generator" content="MediaWiki 1.15alpha" />
    		<meta name="keywords" content="Communes de la Haute-Vienne,Limousin,Haute-Vienne,Communes de France,2003,2004,Aixe-sur-Vienne,Ambazac,Anciennes communes de la Haute-Vienne,Arnac-la-Poste,Augne" />
    		<link rel="alternate" type="application/x-wiki" title="Modifier" href="/w/index.php?title=Communes_de_la_Haute-Vienne&amp;action=edit" />
    		<link rel="edit" title="Modifier" href="/w/index.php?title=Communes_de_la_Haute-Vienne&amp;action=edit" />
    		<link rel="apple-touch-icon" href="http://fr.wikipedia.org/apple-touch-icon.png" />
    Sur d'autres pages, seuls les accents sont mal encodés.
    Comment puis-je faire pour récupérer le contenu HTML comme les navigateurs en étant bien interprété ????

    Comment puis-je intervenir sur l'encodage ?
    Y-a-t-il une solution à mon problème ?

    Merci,
    F.

  2. #2
    Membre confirmé
    Avatar de drieu13
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 131
    Points : 469
    Points
    469
    Par défaut
    Bonjour,

    J'ai vu dans l'API que tu pouvais spécifier le charset dans InputStreamReader:
    in = new InputStreamReader(conn.getInputStream(), "UTF8");

    Pour plus de détails sur les charset cf java.nio.charset.
    Ingénieur d'études informatique à la DSI l'université de Limoges

    Mon blog : https://damienrieu.blogspot.fr/
    Mon projet : https://opentrainingproject.blogspot.fr/

    Linkedin : http://www.linkedin.com/pub/damien-rieu/58/986/2b9
    Twitter : https://twitter.com/drieu

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

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    C'est bon, cela marche
    Merci beaucoup,
    F.

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

Discussions similaires

  1. Récupérer le contenu de la requête dans une variable
    Par cgonzalez dans le forum Langage
    Réponses: 1
    Dernier message: 06/10/2007, 11h44
  2. Réponses: 1
    Dernier message: 29/09/2007, 09h46
  3. Réponses: 7
    Dernier message: 12/06/2007, 14h59
  4. récupérer le contenu d'un dataset dans un textbox ?
    Par mstic dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/03/2007, 19h24
  5. Comment récupérer le contenu d'une URL dans une variable ?
    Par Fildz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/08/2006, 09h26

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