2017-07-19 10 views
3

J'utilise le code ci-dessous pour obtenir du HTML mais je ne reçois pas de code HTML, il contient du caractère non-échappement. J'utilise JSOUP parser qui n'est pas capable d'analyser ce code HTML.Android - Comment obtenir du HTML brut en utilisant evaluateJavascript de Webview? JSOUP n'est pas capable d'analyser le résultat HTML

webview.evaluateJavascript(
         "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();", 
         new ValueCallback<String>() { 
          @Override 
          public void onReceiveValue(String html) { 
          } 
         }); 

Je reçois cette chaîne html du code ci-dessus.

"\u003Chtml>\u003Chead>\n \u003Cmeta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n \u003Clink rel=\"shortcut icon\" href=\"https://www.xyx.com/favicon.ico\" type=\"image/x-icon\">\n \u003Clink rel=\"icon\" href=\"https://www.xyx.com/favicon.ico\" type=\"image/x-icon\">\n \n \u003Ctitle>Page Not Found! : BJSBuzz\u003C/title>\n\n \u003C!-- \n\tOpen Source Social Network (Ossn)/script>\u003C/body>\u003C/html>" 

Répondre

1

pour enlever les UTFCharacthers utiliser cette fonction:

public static StringBuffer removeUTFCharacters(String data) { 
     Pattern p = Pattern.compile("\\\\u(\\p{XDigit}{4})"); 
     Matcher m = p.matcher(data); 
     StringBuffer buf = new StringBuffer(data.length()); 
     while (m.find()) { 
      String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16)); 
      m.appendReplacement(buf, Matcher.quoteReplacement(ch)); 
     } 
     m.appendTail(buf); 
     return buf; 
    } 

et appellent à l'intérieur du onReceiveValue (String html) comme ceci:

@Override 
public void onReceiveValue(String html) { 
String result = removeUTFCharacters(html).toString(); 
} 

Vous obtiendrez une chaîne html propre .

Au revoir, Alex