由于我们的业务系统中有大量的MHT格式的资料,需要对其建立索引,搜索很久了一直没有找到相关解析的类库,只好自己动手丰衣足食了。已实现内容的提取以及和lucene的整合,稍后会完善编码检测及其他内容的提取,做一个完整的parser出来。
- 文本内容提取: 首先提取html部分的内容,解码之后使用nekoHtml提取文本内容;
public class MhtDocHandler extends HtmDocHandler {
private DOMFragmentParser parser = new DOMFragmentParser();
public Document getDocument(InputStream is) throws DocumentHandlerException {
DocumentFragment node = new HTMLDocumentImpl().createDocumentFragment();
try {
String mhts = IOUtils.toString(is);
int a1 = mhts.indexOf("<HTML");
int a2 = mhts.indexOf("</HTML>");
String html = mhts.substring(a1, a2 + 8);
//在mht中文本按照QuotedPrintable格式编码
html = decodeQuotedPrintable(html, "UTF-8");
StringReader r = new StringReader(html);
parser.parse(new InputSource(r), node);
}
catch (Exception e) {
throw new DocumentHandlerException("Cannot parse MHT document: ", e);
}
Document doc = new Document();
StringBuffer sb = new StringBuffer();
getText(sb, node, "title");
String title = sb.toString().trim();
sb.setLength(0);
getText(sb, node, "body");
String text = sb.toString().trim();
if (!title.equals("")) {
doc.add(new Field(WikiDOC.DOC_TITLE, title,
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
}
if (!text.equals("")) {
doc.add(new Field(WikiDOC.DOC_CONTENT, text,
Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
}
return doc;
}
public static String decodeQuotedPrintable(String str, String encoding) {
if (str == null) {
return null;
}
try {
//str = str.replaceAll("=\n", "");//??
byte[] bytes = str.getBytes("US-ASCII");
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
for (int i = 0; i < bytes.length; i++) {
int b = bytes[i];
if (b == '=') {
int u = Character.digit((char) bytes[++i], 16);
int l = Character.digit((char) bytes[++i], 16);
if (u == -1 || l == -1) {//??
continue;
}
buffer.write((char) ((u << 4) + l));
} else {
buffer.write(b);
}
}
return buffer.toString(encoding);
}
catch (Exception e) {
e.printStackTrace();
return str;
}
}
}
<!---->
分享到:
相关推荐
本文详细介绍了使用Java解析MHT文件的基本原理和技术实现,包括如何提取HTML内容、解码Quoted-Printable编码、构建DOM树以及提取所需数据。这对于需要处理MHT文件的应用开发具有很高的参考价值。
MHT文件是一种单一的、自包含的档案格式,它能够保存网页的完整内容,包括HTML、图像和其他嵌入的对象。这个【标题】"java将网页保存成mht格式文件"指向的是一个Java项目,其目的是将网页转换为MHT格式,以便离线...
7. **生成MHT文件**:将解析后的HTML内容和编码后的资源组合成MHT格式的文件。MHT文件通常包含一个头部,定义了文件的MIME类型和所有资源的位置,然后是HTML内容,其中嵌入了资源引用。 8. **Java编程**:`...
- `Session.getDefaultInstance()`和`MimeMessage`类可以用来解析MHT文件,将其内容封装为`MimeMultipart`对象。 2. **解析MIME Multi-part**: - MHT文件通常采用MIME multi-part格式存储数据,其中第一部分通常...
MHT(MHTML)文件是一种单一的文件格式,它包含了网页的所有内容,包括HTML代码、图像、CSS样式和脚本等资源。这种格式通常用于保存Web页面,以便离线查看或便于传输。然而,不是所有的浏览器都支持MHT格式,这时就...
本主题聚焦于如何在VS2008的源码中实现一个对话框,该对话框能有效地显示本地的MHT文件,这种文件格式通常用于存储单一文件的网页内容,包括文字、图片以及其他多媒体元素。MHT全称为MHTML(MIME HTML),是Web页面...
解析网页另存为mht出现的乱码问题,比如乱码:=D4=DA=CF=DF=C1=AA=CF=B5
这种转换过程对于处理Web内容和跨浏览器兼容性问题至关重要。下面我们将深入探讨.mht和.html文件格式的区别以及转换过程中的相关技术。 **.mht文件格式** MHT(MHTML,MIME HTML)是一种单一文件格式,用于存储网页...
【标题】:“VS之mht...总之,“VS之mht文件显示”涵盖了HTML基础、MHT文件格式的理解以及在VS环境下如何处理这类文件的技巧。通过理解和应用这些知识点,开发者可以更有效地在VS中管理和查看MHT文件,提高工作效率。
总之,将HTML文件转换为MHT文件涉及到文件I/O、HTML解析、资源下载和MIME编码等多个技术点,这些都需要对编程和网络协议有深入理解。通过使用Delphi这样的高级开发工具,可以简化这个过程并提高效率。
MHT全称为Merged HTML,它是一种单一文件格式,将HTML代码、图片、样式表等资源都打包在一个文件内,方便保存和传输。而HTML则是标准的超文本标记语言,通常用于创建网页,各元素如图片、脚本等需要链接到外部文件。...
这是因为MHT格式文件需要特殊的解析和渲染,普通的浏览器无法正确地解析和展示MHT格式文件中的内容。 解决这个问题有多种方法。第一种方法是使用特殊的浏览器插件或应用程序来打开MHT格式文件。例如,可以使用支持...
5. **文件操作**:在VC++中,需要使用文件I/O函数(如fopen、fwrite等)来读写文件,将网页的HTML内容和资源数据写入MHT文件。 6. **多线程编程**:在`SaveAsThread.cpp`中,可能涉及到了多线程技术,用于异步保存...
MHTML全称为"Multimedia Hypertext Transfer Protocol",它是一种文件格式,能够将网页内容,包括HTML代码、图像、样式表和其他资源,打包到一个单一的文件中,方便保存和分享。MHT编辑器提供了“所见即所得”...
MHT(MHTML,Merged HTML)是一种单一文件格式,它将网页的所有资源,包括图像、样式表和脚本,都打包在一个文件中。然而,不是所有的浏览器都支持MHT文件,这就是为什么有时需要将其转换为更通用的HTML格式。 MHT...
标题 "提取mht中的文件,Delphi源代码" 涉及的是在Delphi...通过阅读和理解这些源代码,开发者可以学习到文件解析、数据编码解码以及图像处理等方面的知识,这些技能在处理多种类型的文件格式和网络数据时都非常有用。
标题中的“mht格式转html格式”指的是将MHT(MHTML,单个文件Web页面)文件转换为HTML(超文本标记语言)文件的过程。...总的来说,MHT到HTML的转换是一个实用的功能,尤其对于处理网络内容和网页保存的场景。
在IT行业中,MHT(MHTML)和HTML是两种不同的文件格式,它们各自有特定的用途和特点。本文将详细探讨“MHT转HTML”这一主题,帮助你理解这两种格式的区别,以及如何进行转换。 MHT(MHTML,即MIME HTML)是一种单一...
3. **构建MHT头部**:MHT文件以MIME格式开始,包括一个`Content-Type`头,声明文件类型为MHTML,以及`boundary`字段,用于区分不同的HTML内容和资源。 4. **组装MHT内容**:根据MIME格式,将HTML源码和Base64编码的...
该工具用于将较大的MHT格式的QQ记录转换成HTML文本内容和对应的图片附件,解决记录较大时无法打开的问题 将该工具与聊天记录放在同一级目录,并进入命令行调用,调用步骤如下: 第1步: QQMhtToHtml.exe getimg 会在img...