实际上,jsoup不会添加编码的东西。Jsoup只是添加了 似乎 缺少的结束标记。让我解释。
首先,jsoup尝试格式化html。在您的情况下,这意味着它将添加缺少的结束标记。 例
document doc = Jsoup.parse("<div>test<span>test");System.out.println(doc.html());输出:
<html> <head></head> <body> <div> test <span>test</span> </div> </body></html>
如果您检查已编码的内容,您将意识到它们正在关闭标签。
</div> = </div> </div> = </div></body> = </body>
如果您转到该站点并按
Ctrl+
U(使用chrome),则将看到jsoup将解析的内容。Chrome会将颜色赋予其可以识别的有效html标签。由于某种奇怪的原因,它无法识别底部的标签(与转义字符显示的标签相同)。出于同样的原因,jsoup的那些结束标记也存在问题。它不会将它们视为结束标签,而是将其视为文本,因此它会将它们转义,然后通过添加这些标签来规范化html,如我之前所述。
编辑 我设法复制行为。
document doc = Jsoup.parse("<iframe /><span>test</span>");System.out.println(doc.html());您可以看到完全相同的行为。问题在于自动关闭iframe。像这样解决问题
document doc = Jsoup.parse("<iframe></iframe><span>test</span>");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之后无法识别结束标记的问题,因为它将是有效的。



