In fact, jsoup does not add encoded material. Jsoup simply adds closing tags that seem to be missing. Let me explain.
First of all, jsoup is trying to format your html. In your case, this means that it will add closing tags that are missing. Example
Document doc = Jsoup.parse("<div>test<span>test"); System.out.println(doc.html());
Exit:
<html> <head></head> <body> <div> test <span>test</span> </div> </body> </html>
If you check the encoded materials, you will understand that they close the tags.
</div> = </div> </div> = </div> </body> = </body>
If you go to the site and press Ctrl + U (using chrome), you will see that jsoup will parse. Chrome will provide color to the actual html tags that it recognizes. For some odd reason, it will not recognize the tags below (the same ones that appear with escaped characters). For the same reason, jsoup has a problem with these closing tags. He does not consider them as closing tags, but as text, so he eludes them, and then he normalizes the html by adding those tags, as I explained earlier.
EDIT I was able to reproduce the behavior.
Document doc = Jsoup.parse("<iframe /><span>test</span>"); System.out.println(doc.html());
You can see the same behavior. The problem is a self-closing iframe. Thus, this fixes the problem
Document doc = Jsoup.parse("<iframe></iframe><span>test</span>"); System.out.println(doc.html());
EDIT 2 If you just want to get html without creating a document object, you can do it
Connection.Response html = Jsoup.connect("http://iqtestsites.adtech.de/pictelatest/custombkgd/StylelistDevil.html").execute(); System.out.println(html.body());
With the above, you can find the closing iframe itself and replace it with a valid view (or completely remove it). Then you can Jsoup.parse() this string with Jsoup.parse() This will fix the problem of not recognizing closing tags after the iframe, because it will be valid.