Html JsoupUnescapes特殊字符
我正在使用Jsoup删除HTML页面中的所有图像。 我通过HTTP响应接收页面,该响应还包含内容字符集 问题是Jsoup取消了一些特殊字符的映射 例如,对于输入: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’t</p></body></html>"; Document doc = Jsoup.parse(ch
isn;t
跑步后
String check = "<html><head></head><body><p>isn’t</p></body></html>";
Document doc = Jsoup.parse(check);
System.out.println(doc.outerHtml());
我确实得到了正确的输出,但我确信在某些情况下,该字符集不会很好。我只想使用HTTP头中指定的字符集,我担心这会以我无法预测的方式更改我的文档。
有没有其他更干净的方法来删除图像,而不会无意中更改任何其他内容
谢谢大家! 这里是一个不涉及任何字符集的解决方法,HTTP头中指定的字符集除外
String check = "<html><head></head><body><p>isn’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’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’t</p></body></html>