PDF 和 DOCX 幻数

use*_*093 1 pdf upload byte docx magic-numbers

我读取了第一个字节来区分文件类型,但 PDF 和 DOCX 都有一个“0x50”幻数。我该如何处理这种情况?

Dav*_*che 5

PDF 文件没有以它们开头的“神奇”字节。如果您阅读 PDF 规范,您会发现它们必须以“%PDF”开头,但实际上许多 PDF 文件并非如此。

1) 仅仅寻找 %PDF 标头来识别 PDF 文件是非常不可靠的,有效的 PDF 文件是您可以解析的文件(至少有一个预告片、交叉引用表等)。

2) 曾经有人建议 PDF 文件在 %PDF 标头之前包含二进制数据,以确保它们被视为二进制文件。结果,PDF 阅读器一度开始在 %PDF 标头之前接受一定数量的二进制字节(随机字节)。此类文件无法通过简单的幻数或一串幻数来检测。

  • [需要引用] 对于您的大多数不寻常的主张。Hugo 的引文表明 %PDF 是相当标准的。 (3认同)
  • @Jayen 在当前软件中将任何内容放在 %PDF 之前或 %%EOF 之后都可以被视为错误(除非 pdf 不用于分发,而仅用于某些特殊的打印机队列)。 (3认同)
  • 请参阅(例如)Adobe Systems 的 PDF 版本 1.3 的 PDF 参考第二版中的实施说明 13:“13. Acrobat 查看器只要求标题出现在文件的前 1024 字节内的某处。”。是的,这是一份旧文档,但它仍然是全球使用的大部分 PDF 标准的基础。此外,我从 1997 年开始编写了一个主要的商业 PDF 预检软件的第一个版本。相信我,我不寻常的说法是正确的。 (2认同)