Html JsoupUnescapes特殊字符

Html JsoupUnescapes特殊字符,html,character-encoding,escaping,jsoup,Html,Character Encoding,Escaping,Jsoup,我正在使用Jsoup删除HTML页面中的所有图像。 我通过HTTP响应接收页面,该响应还包含内容字符集 问题是Jsoup取消了一些特殊字符的映射 例如,对于输入: isn;t 跑步后 String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>"; Document doc = Jsoup.parse(ch

我正在使用Jsoup删除HTML页面中的所有图像。 我通过HTTP响应接收页面,该响应还包含内容字符集

问题是Jsoup取消了一些特殊字符的映射

例如,对于输入:

isn;t

跑步后

String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>";
Document doc = Jsoup.parse(check);
System.out.println(doc.outerHtml());
我确实得到了正确的输出,但我确信在某些情况下,该字符集不会很好。我只想使用HTTP头中指定的字符集,我担心这会以我无法预测的方式更改我的文档。 有没有其他更干净的方法来删除图像,而不会无意中更改任何其他内容


谢谢大家!

这里是一个不涉及任何字符集的解决方法,HTTP头中指定的字符集除外

String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>".replaceAll("&([^;]+?);", "**$1;");

Document doc = Jsoup.parse(check);

doc.outputSettings().prettyPrint(false).escapeMode(EscapeMode.extended);

System.out.println(doc.outerHtml().replaceAll("\\*\\*([^;]+?);", "&$1;"));
String check=“不是”。replaceAll(&([^;]+?);,“**$1;”);
Document doc=Jsoup.parse(检查);
doc.outputSettings().prettyPrint(false).escapeMode(escapeMode.extended);
System.out.println(doc.outerHtml().replaceAll(“\\*\\*([^;]+?);”,“&$1;”);
输出

<html><head></head><body><p>isn&rsquo;t</p></body></html>
isn;t

讨论

我希望Jsoup的API中有一个解决方案-@dlv

使用Jsoup的API需要编写一个定制的NodeVisitor。这将导致(重新)在Jsoup中发明一些现有代码。自定义Nodevisitor将生成一个HTML转义码,而不是unicode字符

另一种选择是编写自定义字符编码器。默认的UTF-8字符编码器可以对
进行编码。这就是为什么Jsoup没有在最终的HTML代码中保留原始转义序列


上述两个选项中的任何一个都代表了一项巨大的编码工作。最终,我们可以在Jsoup中添加一个增强功能,让我们选择如何生成最终HTML代码中的字符:十六进制转义(
&AB;
)、十进制转义(
&151;
)、原始转义序列(
)或编写编码字符(这是您文章中的情况)。

谢谢,虽然我希望Jsoup的API中有一个解决方案,但我现在将使用它。@Ravisha您可以在本页的“最新信息”部分中找到此信息:我遇到了一个问题,客户机的内容中有多个星号,并且此逻辑在内容前加上了不需要的符号。我使用了不可见的ASCII 31(单位分隔符),而不是星号(*)。
<html><head></head><body><p>isn&rsquo;t</p></body></html>