对*.mht文件结构的一个浅显分析

本文详细解析了.mht文件的内部结构及编码方式,并介绍了如何通过Excel2003生成包含多个表单内容的.mht文件。此外,还探讨了.mht文件中不同表单内容的集成方法以及通过javascript实现页面内容切换的技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日,笔者在进行需求分析的过程中,使用到了利用Excel2003文件直接生成.mht档案文件,然后由web系统对.mht文件 进行索引的一个简单应用,引起了笔者对.mht文件结构进行分析的兴趣,经过尝试和分析,特将心得陈述如下,仅供同行参考:

1.利用MSIE直接打开.mht文件,然后在"查看/源文件"中可以对其内容进行分析;

2.笔者发现.mht文件在运行时状态下,其页面内容中包含若干的汉字,但是.mht的源文件中没有任何的汉字内容,进而分析其内容中有无相应的解码引用,唯一发现的是一个引用文件是"http://www.w3.org/TR/REC-html40",但是很遗憾,该文件并不是解码文件,后来,笔者发现所有的类似"&#34920;"结构有重复出现的迹象,于是笔者尝试着复制不同的"&#34920;"保存后在运行时状态时页面内容果然发生了汉字内容的变化,于是笔者断定.mht采用了非常规编码格式,终于在<head></head>声明代码段中发现了"<meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dus-ascii">",经过测试,任何采用此编码的htm页面,均能够对类似"&#34920;"结构进行成功解析;

3.笔者的.mht文件由Excel2003文件直接生成,该文件中包含多个worksheet,也就是多个表单内容,如何在.mht中实现集成?在破译了.mht的解码结构后("<meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dus-ascii">),很清晰的能够发现.mht文件源代码中包含多段"<html></html>"结构,结构间采用类似"------=_NextPart_01C73A56.E1B7DC30"进行分割,显而易见,N个worksheet内通对应了N个"<html></html>"结构.

4.当然,微软将Excel2003文件直接生成.mht档案文件的过程中采用了javascript脚本技术实现了多个页内容之间的切换,其代码就不在此敷述,有兴趣的读者可以自己自己尝试分析,此处笔者需要特别一提的是微软在javascript脚本中的一个用法,如下:

function fnBuildFrameset()
{
           var szHTML=3D"后续的特殊用法,有点类似于Vb6" ;

           with (document)  {
                open("text/html","replace");
                 write(szHTML);
                 close();
          }

}

5.关于.mht的更多精彩,还望和更多同行共同探讨.

 

 

.mht 文件是一种 **MHTML(MIME HTML)** 格式文件,用于将网页内容(包括 HTML、图片、样式表等)打包成一个单独的文件,常用于网页归档或电子邮件中保存网页[^1]。以下是几种在不同操作系统和应用程序中打开 `.mht` 文件的方法: ### 1. 使用 Microsoft Outlook 或 Outlook Express 由于 `.mht` 文件最初设计用于电子邮件归档,因此可以使用 **Microsoft Outlook Express** 或某些版本的 **Microsoft Outlook** 打开此类文件。只需双击文件,系统会自动调用默认程序打开它。 ### 2. 使用 Internet Explorer 或 Microsoft Edge(旧版) Internet Explorer 原生支持 `.mht` 文件格式。打开 Internet Explorer,选择“文件” > “打开” > 选择 `.mht` 文件即可[^2]。 Microsoft Edge 的早期版本(基于 EdgeHTML)也支持 MHTML,但新版基于 Chromium 的 Edge 默认不支持,需启用相关设置或使用扩展。 ### 3. 使用第三方浏览器扩展或插件 一些浏览器(如 Google Chrome 和 Firefox)本身不支持 `.mht` 文件,但可以通过安装扩展来实现支持。例如: - **Google Chrome**:可安装 "MHT Viewer" 或 "Save Page WE" 插件来查看和保存 `.mht` 文件。 - **Firefox**:可通过 "Mozilla Archive Format" 插件支持 `.mht` 文件。 ### 4. 使用专用 MHT 查看工具 有一些专门用于打开 `.mht` 文件的工具,例如: - **MHT File Viewer**(Windows) - **Winmail Opener**(跨平台) - **MHT Viewer**(Mac) ### 5. 在 Linux 系统中打开 `.mht` 文件 Linux 系统默认不支持 `.mht` 文件,但可以通过以下方式打开: - 使用支持 MHTML 的浏览器(如 Firefox + 插件) - 使用命令行工具 `w3m` 或 `lynx` 查看纯文本内容 - 安装特定工具如 `mhhtml` 或使用 Python 脚本解析 例如,使用 Python 解析 `.mht` 文件的示例代码如下: ```python import email from email import policy from email.parser import BytesParser with open("example.mht", "rb") as f: msg = BytesParser(policy=policy.default).parse(f) for part in msg.walk(): content_type = part.get_content_type() if content_type == "text/html": print(part.get_payload(decode=True).decode(part.get_content_charset())) ``` ### 6. 转换 `.mht` 文件为其他格式 如果不想直接打开 `.mht` 文件,也可以使用工具将其转换为 `.html`、`.pdf` 等格式。例如,使用 **MHT Converter Studio** 或在线转换工具如 [MHT2HTML](https://www.mht2html.com)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值