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

使用Jsoup解析MHTML/HTML页面时,如何去除或转义=3D类垃圾值?

解决Jsoup解析离线HTML出现=3D等垃圾值的问题

你遇到的=3D、=3d&&quote这类垃圾值,本质是Quoted-Printable编码的残留,通常是网页保存过程中(比如从邮件导出、特殊网页保存)的编码遗留:=3D是等号(=)的Quoted-Printable编码,&&quote是HTML实体转义错误叠加的结果。以下是几种解决方法:

方法一:用Java邮件工具类解码Quoted-Printable

Java自带的javax.mail.internet.MimeUtility可以直接解码这种编码,先解码HTML内容再交给Jsoup解析,是最稳妥的方式:

import javax.mail.internet.MimeUtility;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class HtmlCleaner {
    public static void main(String[] args) throws IOException {
        // 读取离线HTML文件内容
        File htmlFile = new File("your-offline-page.html");
        BufferedReader reader = new BufferedReader(new FileReader(htmlFile));
        StringBuilder rawContent = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            rawContent.append(line);
        }
        reader.close();

        // 解码Quoted-Printable编码
        String decodedContent = MimeUtility.decodeText(rawContent.toString());

        // 用Jsoup解析处理后的干净内容
        Document doc = Jsoup.parse(decodedContent);
        // 后续数据提取操作,比如获取正文文本
        String cleanText = doc.body().text();
        System.out.println(cleanText);
    }
}

如果项目没有引入Java Mail依赖,需要添加:

<!-- Maven依赖 -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.6.2</version>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

方法二:手动替换编码残留(无依赖)

如果不想引入额外依赖,可以直接通过字符串替换处理已知的编码残留:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.IOException;

public class HtmlCleaner {
    public static void main(String[] args) throws IOException {
        // 先读取原始HTML
        Document rawDoc = Jsoup.parse(new File("your-offline-page.html"), "UTF-8");
        String rawHtml = rawDoc.html();

        // 清理Quoted-Printable残留和错误实体
        String cleanedHtml = rawHtml.replaceAll("=3D", "=")
                                   .replaceAll("(?m)^=\\s*$", "") // 移除行尾的换行标记=
                                   .replaceAll("&amp;&amp;quote;", "&quot;"); // 修复叠加的引号实体

        // 重新解析清理后的内容
        Document cleanedDoc = Jsoup.parse(cleanedHtml);
        String cleanText = cleanedDoc.body().text();
        System.out.println(cleanText);
    }
}

方法三:用Apache Commons Codec解码

Apache Commons Codec库的QuotedPrintableCodec也可以处理Quoted-Printable编码,用法如下:

import org.apache.commons.codec.net.QuotedPrintableCodec;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class HtmlCleaner {
    public static void main(String[] args) throws IOException, UnsupportedEncodingException {
        File htmlFile = new File("your-offline-page.html");
        BufferedReader reader = new BufferedReader(new FileReader(htmlFile));
        StringBuilder rawContent = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            rawContent.append(line);
        }
        reader.close();

        // 解码Quoted-Printable
        QuotedPrintableCodec codec = new QuotedPrintableCodec("UTF-8");
        String decodedContent = codec.decode(rawContent.toString());

        // Jsoup解析
        Document doc = Jsoup.parse(decodedContent);
        System.out.println(doc.body().text());
    }
}

对应的Maven依赖:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

内容的提问来源于stack exchange,提问作者Kunanj Pradhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:58:27