JSOUP为html添加了额外的编码内容

实际上JSOUP在我的jSOUP解析器中为我的HTML添加了一些额外的编码值。我正在尝试通过以下方式来处理它

String url = "http://iqtestsites.adtech.de/pictelatest/custombkgd/StylelistDevil.html"; System.out.println("Fetching %s..."+url); Document doc = Jsoup.connect(url).get(); //System.out.println(doc.html()); Document.OutputSettings settings = doc.outputSettings(); settings.prettyPrint(false); settings.escapeMode(Entities.EscapeMode.base); settings.charset("ASCII"); String html = doc.html(); System.out.println(html); 

但是由于某种原因找不到实体类并且发出错误。 我包含的lib是

 import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; 

最初的HTML是

      

来自JSOUP的doc.html()给出了:

        
</div> </div> </body> </html>

iframe元素已经添加了一些编码的东西。

请帮忙。

谢谢Swaraj

实际上jsoup并没有添加编码的东西。 Jsoup只是添加了似乎缺少的结束标记。 让我解释。

首先,jsoup尝试格式化你的html。 在您的情况下,这意味着它将添加缺少的结束标记。

 Document doc = Jsoup.parse("
testtest"); System.out.println(doc.html());

输出:

    
test test

如果你检查编码的东西,你会发现它们正在关闭标签。

 </div> =  </div> =  </body> =  

如果你去网站并按Ctrl + U (使用chrome),你会看到jsoup将解析什么。 Chrome会为其识别的有效html标记添加颜色。 由于某些奇怪的原因,它无法识别底部的标签(与转义字符一起出现的标签)。 出于同样的原因,jsoup也存在关闭标签的问题。 它不会将它们视为结束标记,而是将其视为文本,因此它会将它们转义,然后通过添加这些标记来规范化html,如前所述。

编辑我设法复制行为。

 Document doc = Jsoup.parse("test"); System.out.println(doc.html()); 

您可以看到完全相同的行为。 问题在于自关闭iframe。 这样做可以解决问题

 Document doc = Jsoup.parse("test"); System.out.println(doc.html()); 

编辑2如果您只想在不构建文档对象的情况下接收html,则可以执行此操作

 Connection.Response html = Jsoup.connect("http://iqtestsites.adtech.de/pictelatest/custombkgd/StylelistDevil.html").execute(); System.out.println(html.body()); 

有了上述内容,您可以找到自关闭iframe并将其替换为有效表示(或完全删除它)。 然后你可以用Jsoup.parse()解析那个字符串。这将解决在iframe之后无法识别结束标记的问题,因为它是有效的。