如何确定 ZIP/RAR 文件的压缩方式

24

我有几个zip和rar文件正在处理,我试图分析每个文件的压缩属性(压缩级别、压缩算法(例如deflate、LZMA、BZip2)、字典大小、单词大小等),但我还没有找到一种方法来实现。

是否有任何软件或其他方式可以分析文件以确定这些属性?

谢谢!

7个回答

19

这是一个相当老的问题,但我还是想发表一下我的看法,因为上面的一些方法对我来说不太容易使用。

您也可以使用7-Zip来确定这一点。打开存档文件后,有一个压缩方法的列:

7zip属性


1
Windows文件资源管理器也有此列可用;不过,您可能需要在打开zip文件后添加它...右键单击表标题并确保选中“方法”选项。 - Nij

11

对于ZIP文件 - 是的,使用zipinfo

对于RAR文件,可以使用7Zip或WinRAR轻松找到头部信息,请阅读附带的文档。


谢谢你的提示!我需要找出 MS Word 在生成 .DOCX 文件时使用的 ZIP 设置。DOCX 文件是一个 ZIP 存档,包含多个 XML 文件和嵌入的媒体文件。您可以使用所选工具批处理这些文件,但最后需要重新打包为 MS Word 接受的 ZIP 文件设置!我使用 zipinfo 分析了 MS Word 写入的 DOCX 文件。如果我对 DOCX ZIP 格式得出最终结论,我会在这里发布。 - porg

7

通过7-Zip(或p7zip)命令行:

7z l -slt archive.file

如果要具体查找压缩方法:

7z l -slt archive.file | grep -e '^---' -e '^Path =' -e '^Method ='

我也可以使用 grep -E '^((---)|(Path =)|(Method =))' - palswim

6
我建议您查看这些文件,可以使用hachoir-wx。如果您使用Windows系统,可以尝试使用ActivePython和PyPM,或参考如何安装Python包。当您安装了必要的hachoir包后,可以像这样运行GUI:

python C:\Python27\Scripts\hachoir-wx

它使您能够浏览RAR和ZIP文件的数据字段。请参考此屏幕截图进行查看。
对于RAR文件,请查看WinRAR安装目录中的technote.txt文件。这提供了RAR规范的详细信息。您可能会对以下内容感兴趣:
 HEAD_FLAGS      Bit flags: 2 bytes
                 0x10 - information from previous files is used (solid flag)
                 bits 7 6 5 (for RAR 2.0 and later)
                      0 0 0    - dictionary size   64 KB
                      0 0 1    - dictionary size  128 KB
                      0 1 0    - dictionary size  256 KB
                      0 1 1    - dictionary size  512 KB
                      1 0 0    - dictionary size 1024 KB
                      1 0 1    - dictionary size 2048 KB
                      1 1 0    - dictionary size 4096 KB
                      1 1 1    - file is directory

字典大小也可以在WinRAR图形用户界面中找到。
 METHOD          Packing method 1 byte
                 0x30 - storing
                 0x31 - fastest compression
                 0x32 - fast compression
                 0x33 - normal compression
                 0x34 - good compression
                 0x35 - best compression

维基百科也知道这一点:

RAR压缩实用程序是专有的,具有封闭的算法。RAR归Alexander L. Roshal所有,他是Eugene Roshal的哥哥。RAR的第3版基于Lempel-Ziv(LZSS)和预测通过部分匹配(PPM)压缩,特别是Dmitry Shkarin的PPMII的PPMd实现。

对于ZIP文件,我会先查看规格说明ZIP维基百科页面。这些可能很有趣:

  general purpose bit flag: (2 bytes)
  compression method: (2 bytes)

第一个文件的 METHOD 字节通常在偏移量 0x2D 处找到。 - Quolonel Questions

1

对于ZIP文件,有一个命令叫做zipinfo。


当我在控制台输入这个命令时,它会显示找不到该命令。 - O. R. Mapper
sudo apt install unzip - holzkohlengrill
版本 适用于Windows。 - kirogasa

1

zipfile python模块可以用于获取有关zipfile的信息。 ZipInfo类提供了文件名、压缩类型、压缩大小、文件大小等信息...

Python代码片段,用于获取zip存档中文件的文件名和压缩类型。

import zipfile

with zipfile.ZipFile(path_to_zipfile, 'r') as zip:
    for info in zip.infolist():
        print(f'filename: {info.filename}')
        print(f'compress type: {info.compress_type}')

这将列出所有文件名及其对应的压缩类型(整数),可用于查找压缩方法。
您可以使用infolist()获取有关文件的更多信息

链接在被接受的答案中的Python模块不可用,zipfile模块可能会有所帮助。


0

类型很容易,只需查看文件头(PKRar)。

至于剩下的部分,我怀疑这些信息在压缩内容中是不可用的。


是的,它是可用的(至少对于rar格式)。但是如何获取它显然取决于特定的文件格式。 - Artefacto
5
如果没有这些信息,就无法对数据进行解压缩。 - Nick Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接