Jsoup Bug?解析.mht文档

时间:2014-08-13 12:50:31

标签: java html jsoup mhtml

我正在尝试使用Jsoup解析MHT文档(版本:1.7.3)。目标是打开两个文件并将它们合并在一起(连接头部和主体)以获得一个完整的文件。 但首先我解析mht文件时遇到问题,因为解析后的结果有明显的信息滞后,解析后无法打开。我做的是以下内容:

  • 使用Word创建一个mht文件(包含一个图像和一些文本)
  • 使用Jsoup
  • 将其解析为String
  • 将字符串写入文件
  • 打开文件,文件已损坏

我使用了以下代码:

private static final String USED_CHARSET = "windows-1252";
private static final String PATH = "C:\\Test\\";
private static final Charset CHARSET = Charset.forName(USED_CHARSET);

@Test
public void test() throws IOException {
    Document doc = Jsoup.parse(new File(PATH, "sourceMht.mht"),
            USED_CHARSET);

    writeDoc(new File(PATH, "parsedMht.mht"), doc.html());
}

private void writeDoc(File file, String html) throws IOException {
    Writer out = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream(file), CHARSET));
    try {
        out.write(html);
    } finally {
        out.flush();
        out.close();
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

这不是Jsoup错误。问题是MHT文件是MIME Multipart文件,将html和其他资源捆绑在一起成为一个文件。如果您在文本编辑器(例如记事本)中打开MHT文件,您会发现它不是纯HTML文件而是MIME编码文件:

MIME-Version: 1.0
Content-Type: multipart/related; boundary="----=_NextPart_01CFB635.40B30630"
....

在某些部分中存在各种资产,例如html,css,图像等。因此,在将Jsoup应用于问题之前,首先需要解析MIME多部分文件以获取各个部分。

如何解决该问题的一些有用的参考包括: