Bonjour,

Je cherche à récupérer le contenu d'une page web mais j'ai de vrais problèmes d'encodage.
Lorsque j'affiche la page dans le navigateur c'est normal mais avec java ça me donne ça :

Nom : 811408Capture.png
Affichages : 197
Taille : 5,8 Ko

J'essaye de récupérer la page avec diverses fonctions :

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
 
	static String get(String adresse){
	   BufferedReader reader = null;
	   String retour = null;
	   try {
		  //création de la connection
	      URL url = new URL(adresse.replace(" ", "%20"));
	      URLConnection conn = url.openConnection();
	      conn.setRequestProperty( "Host", url.getHost() );
	      conn.setRequestProperty( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" );
	      conn.setRequestProperty( "Accept-Language", "fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" );
	      conn.setRequestProperty( "Connection", "keep-alive" );
	      conn.setRequestProperty( "User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" );
	      if(cookieValue!=null) conn.setRequestProperty("Cookie", cookieValue);
	      if(CSRFToken!=null) conn.setRequestProperty("X-CSRFToken",CSRFToken);
	      conn.setDoOutput(true);
 
	      //lecture de la réponse
	      reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 
			StringBuilder sb = new StringBuilder();
			char[] cbuf = new char[8192];
			int len;
			while ( (len = reader.read(cbuf)) >= 0 ) {
				sb.append(cbuf, 0, len);
			}
			retour = sb.toString();
	   }catch (Exception e) {
		   Applet_VeilleConcurentielle.erreur(e);
		}finally{
	      try{ if(reader!=null) reader.close(); }catch(Exception e){
	    	  Applet_VeilleConcurentielle.erreur(e);
	      }
	   }
	   return retour;
	}
 
 
 
	//lit une page Web
	static String url(String adresse)
	{
		String code;
		InputStreamReader reader=null;
		try {
	        URL u=new URL(adresse.replace(" ", "%20"));
	        reader = new InputStreamReader( u.openStream(), "utf8" );
			StringBuilder sb = new StringBuilder();
			// Le buffer de lecture :
			char[] cbuf = new char[8192];
			// La quantité d'élément lu à chaque iteration (peut varier)
			int len;
			// boucle de lecture / copie 
			while ( (len = reader.read(cbuf)) >= 0 ) {
				sb.append(cbuf, 0, len);
			}
			// Copie en String :
			code = sb.toString();
			return code;
		}
		 catch (ConnectException e) {
			 Fc.mess("Erreur de connexion :\n"+e.toString());
			 Applet_VeilleConcurentielle.erreur(e);
		 }
		 catch (SocketException e) {
			 Fc.mess("Erreur de connexion :\n"+e.toString());
			 Applet_VeilleConcurentielle.erreur(e);
		} catch (UnknownHostException e) {
			 Fc.mess("Problème de connexion (hote inconnu) :\n"+e.toString());
			 Applet_VeilleConcurentielle.erreur(e);
		} catch (MalformedURLException e) {
			 Applet_VeilleConcurentielle.erreur(e);
		} catch (IOException e) {
			 Applet_VeilleConcurentielle.erreur(e);
		} finally {
			// on ferme les flux
			try {
				if(reader!=null) reader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				 Applet_VeilleConcurentielle.erreur(e);
			} 
		}
		return null;
	}
Et de décoder avec ça mais rien n'y fait :

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
 
	static String utf8Encode(String txt)
	{
		try {
			return new String(txt.getBytes(), "utf8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}
 
 
	static String utf8Decode(String txt)
	{
		try {
			return new String(txt.getBytes("ISO-8859-1"),"UTF-8"); 
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}
 
	static String decode(String txt)
	{
		  CharsetDecoder d=Charset.forName("UTF-16").newDecoder();
		  d.replaceWith("x");
		  d.onMalformedInput(CodingErrorAction.REPLACE);
		  d.onUnmappableCharacter(CodingErrorAction.REPLACE);
		  ByteBuffer in=ByteBuffer.wrap(txt.getBytes());
		  try {
			return d.decode(in).toString();
		} catch (CharacterCodingException e) {
			e.printStackTrace();
		}
		  return null;
	}
Voici la requête inspectée par WebScarab : Nom : Capture.PNG
Affichages : 258
Taille : 62,2 Ko