2017-07-19 28 views
3

我使用下面的代碼來獲取HTML,但我沒有得到純HTML,它包含非轉義字符。我正在使用JSOUP解析器,它無法解析此HTML。Android - 如何使用Webview中的evaluateJavascript獲取純HTML? JSOUP無法解析結果HTML

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

我從上面的代碼得到這個html字符串。

"\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>" 

回答

1

用於去除UTFCharacthers使用此功能:

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; 
    } 

,並稱之爲onReceiveValue(字符串HTML)裏面是這樣的:

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

您將獲得乾淨的HTML字符串。

再見, 亞歷克斯