我正在尝试从导出到 DXL(Domino XML 模式)的 Domino 文档中提取附件。对于 encoding="base64" 的元素,我可以轻松处理文件数据内容。但是,大多数文件都有 encoding="none" ——这在逻辑上应该意味着直接嵌入——但是容器没有可读的文本,而是包含与 base64 编码非常相似的 76 个字符的行。它们不是有效的 base64 或 uuencoded 信息,也不是我能识别的任何东西。有谁知道 IBM 称之为“无”的那种神秘编码是什么?一个典型的片段如下所示:
<file hosttype='msdos' compression='none' flags='sign storedindoc' encoding='none'
name='myfilename.doc' size='50688' storagesize='32519' desiredcompression='huffman'>
<created><datetime dst='true'>20061110T193351,87-02</datetime></created>
<modified><datetime dst='true'>20061110T193351,73-02</datetime></modified><filedata>
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAXgAAAAAAAAAA
EAAAYAAAAAEAAAD+////AAAAAF0AAAD/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
(它持续了数百行......最多)
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAA
</filedata></file>
它看起来像一些 MIME 编码,但它不是 base64。比特数不加起来导致解码器失败。(是的,我从解析器提要中删除了 NL。)
如何解码可能未编码的内容?(根据 IBM 魔术师的说法。)
[后记] 我意识到该文档不符合 DXL DTD,即它是可解析的但不验证。此外,尽管 encoding="none" 文件数据内容确实是 base64,但不一定在末尾填充 '='。此外,XML SAX 解析器正在向我传递文本内容的块而不是整行。由于 base64 需要 4 个字符的倍数来操作(生成 3 个字节),所以它搞砸了解码。如果我忽略 DTD 并强制进行仔细缓冲的 base64 解码,即使 @encoding != "base64" (由 DTD),那么一切顺利。看起来 IBM 并不关心遵循自己的 DTD。