You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jsoup处理HTML时无法按预期转义重音字符等实体的问题问询

Jsoup重音字符转义失效问题修复方案

问题原因

你设置的Entities.EscapeMode.extended未生效,是因为Jsoup默认输出字符集为UTF-8,对于UTF-8可正常展示的非ASCII字符(包括各类重音字符),默认不会触发实体转义逻辑,只有当输出字符集不支持对应字符时,才会自动转义为HTML实体。

修复要点

  • 输出设置中新增字符集配置,指定为ASCII,强制所有非ASCII字符转义为对应HTML实体
  • 修正节点替换逻辑,避免提前解析实体导致转义失效

修复后代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Entities;
import org.jsoup.nodes.TextNode;
import org.jsoup.select.Elements;
import java.nio.charset.StandardCharsets;

public class JsoupWrapper {

    public static void main(String[] args) {
        String s = "<p style=\"text-align: justify;\">Cet amendement vise &#224; rectifier le montant des annulations sur le programme 181 &#171;&#160;Pr&#233;vention des risques&#160;&#187;, de la mission &#171;&#160;&#201;cologie, d&#233;veloppement et mobilit&#233;s durables&#160;&#187;, en l&#8217;abaissant de 24,2&#160;M&#8364;.</p>\n" +
                "<p style=\"text-align: justify;\">Cette minoration des annulations est propos&#233;e dans le cadre du red&#233;ploiement de cr&#233;dits du programme d&#8217;investissements d&#8217;avenir (PIA) depuis les actions du PIA port&#233;es par l&#8217;Agence de l&#8217;environnement et de la ma&#238;trise de l&#8217;&#233;nergie (ADEME), vers l&#8217;action &#171;&#160;Equipex&#160;&#187; port&#233;e par l&#8217;Agence nationale de la recherche (ANR), pour financer les projets &#171;&#160;Microcarb&#160;&#187; et &#171;&#160;Polar Pod&#160;&#187;. Le red&#233;ploiement concernera pour l&#8217;ADEME l&#8217;action &#171;&#160;V&#233;hicules et transporteurs du futur&#160;&#187;, &#224; hauteur de 40&#160;M&#8364; et l&#8217;action &#171;&#160;D&#233;monstrateurs de la transition &#233;nerg&#233;tique&#160;&#187;, &#224; hauteur de 10,8&#160;M&#8364;. Le soutien aux deux projets &#171;&#160;Microcarb&#160;&#187; et &#171;&#160;Polar Pod&#160;&#187; demeure complet, cette modification constituant un simple ajustement qui permet, tout en maintenant le soutien &#224; &#171;&#160;Polar Pod&#160;&#187; et &#171;&#160;Microcarb&#160;&#187;, de pr&#233;server des moyens sur l&#8217;action &#171;&#160;V&#233;hicules et transporteurs du futur&#160;&#187; du PIA en vue de la conclusion des assises de la mobilit&#233;.</p>\n" +
                "<p style=\"text-align: justify;\">Cet amendement est compl&#233;t&#233; par un amendement miroir sur le programme 172 &#171;&#160;Recherches scientifiques et technologiques pluridisciplinaires&#160;&#187;, de la mission &#171;&#160;Recherche et enseignement sup&#233;rieur&#160;&#187;.</p>";
        System.out.println(cleanToBeforeRevision(s));
    }

    public static String cleanToBeforeRevision(String html) {
        if (html == null) {
            return null;
        }
        Document doc = Jsoup.parse(html);
        // 核心修改:指定输出字符集为ASCII,配合extended转义模式
        doc.outputSettings()
                .prettyPrint(false)
                .escapeMode(Entities.EscapeMode.extended)
                .charset(StandardCharsets.US_ASCII.name());

        Elements toReverts = doc.select("span.ins");
        Elements toRestores = doc.select("span.del, span[data-userid], span[data-username]");

        toReverts.forEach(org.jsoup.nodes.Node::remove);

        toRestores.forEach(toRestore->{
            // 修正:取文本内容而非html内容,避免提前解析实体
            TextNode text = new TextNode(toRestore.text());
            toRestore.replaceWith(text);
        });

        return doc.body().html();
    }
}

效果说明

该修复适配你使用的Jsoup 1.12.1版本,修改后输出的HTML会自动将à转为&agrave;、é转为&eacute;,同时<、>、"等HTML特殊字符也会正常转义,最终输出为符合要求的有效HTML格式。


内容的提问来源于stack exchange,提问作者Alexis Dufrenoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:15:04