9

我的 TBIRD 地址簿上有几个地址列表。

每次我需要编辑包含在多个列表中的地址时,很难找到哪个列表包含要修改的地址。

作为一个帮助工具,我想阅读几个文件,并给用户一个列表,其中 xxx.MAB 文件在一次搜索中包含搜索到的地址。

有了生成的列表,用户可以简单地去编辑正确的地址列表。

想至少知道提到的 MAB 文件的格式,所以我可以打开 + 搜索文件中的字符串。

提前致谢

PD 已经询问了 mozilla 论坛,但是 mozilla 没有计划将地址合并到一个主文件中,并且不同的列表只包含指向主文件的链接。有一个人想这样做,但由于缺乏资源,他不知道什么时候,

在这个论坛上,有一个类似的问题提到了 MORK 文件,但我实际的 TBIRD 似乎包含在 MAB 文件中的所有地址

4

2 回答 2

8

恐怕没有答案可以为您提供此问题的适当解决方案。

MORK是一个文本数据库,包含文件地址簿数据(.mab文件)和邮件文件夹摘要(.msf文件)。

该格式由 David McCusker 编写,混合了各种数字命名空间,并且没有记录,似乎不再被开发/维护/支持。掌握它的唯一方法是对它进行逆向工程,同时使用这种格式查看源代码。

然而,有经验的人试图为这种文件格式编写解析器,但没有成功。根据 Wikipedia 的说法,前 Netscape 工程师 Jamie Zawinski 对格式有这样的看法:

...在我 19 年的职业生涯中见过的最伤脑筋的文件格式

此页面说明以下内容:

简而言之,让我们数一数它(莫克的)罪恶:

  • 重叠的两个不同的数字命名空间。
  • 它无法决定使用哪种字符引用语法:反斜杠?带美元符号的十六进制编码?
  • 有时允许 C++ 行注释,但有时 // 只是 URL 中的一对字符。
  • 它进行了所有这些严肃的压缩工作(两个不同的字符串驻留哈希表),然后在不使用 UTF-8 的情况下写出 Unicode 字符串:写出未打包的 wchar_t 字符!
  • 更糟糕的是,它使用 3 字节编码对每个 wchar_t 进行十六进制编码,这意味着文件大小将是 3x 或 6x(取决于 whchar_t 是 2 字节还是 4 字节。)
  • 它伪装成“文本”文件格式,而实际上它只是另一个二进制 blob 文件,只是它用 ASCII 表示所有幻数。它不是人类可读的,也不是可手动编辑的,因此它使用短行且不使用二进制字符的唯一好处是它使文件更大。哦等等,我的错误,这实际上根本不是一个好处。”

挫败感在这里闪耀,这显然不是一项简单的任务。

因此,在 Mozilla 产品之外显然不存在真正能够解析这种格式的解析器。

我过去曾对复杂的文件格式进行逆向工程,并且知道只要有耐心和适量的精力就可以完成。

可悲的是,这似乎也是您唯一的选择。一个好的起点是看一下Thunderbird 的源代码

我知道这并没有给你一个直接的解决方案,但我认为考虑到这种格式的情况,这是对这个问题的唯一答案。

当然,您可以随时查看扩展 API,看看它是否允许您以比直接处理文件格式更结构化的方式访问所需的数据。

于 2013-08-30T03:41:18.190 回答
4

读取 mork 的示例代码

Node.js:https ://www.npmjs.com/package/mork-parser

Perl:http ://metacpan.org/pod/Mozilla::Mork

Python:https ://github.com/KevinGoodsell/mork-converter

更多链接:https ://wiki.mozilla.org/Mork

于 2013-09-01T10:07:29.647 回答