00

先看结论

  • Gzip 是一种把任意数据保存为一个或多个顺序成员的无损压缩数据格式,主要限制是不支持随机访问,也不能完整保存文件系统元数据。
  • GZ 或 GZIP 文件应使用兼容 gzip 的解压工具打开,例如 GNU gzip。在 Windows 上,选择明确支持 gzip 的本地压缩工具并执行解压;在 macOS 上,可使用兼容的图形工具或 GNU gzip;在手机上,应选择支持 gzip 的文件应用并执行解压,而不是直接预览压缩字节。合规解压器会检查 1F 8B 和压缩方法,正确跳过可选字段,并依次处理所有成员。完整性要求较高时还应验证 CRC-32。Gzip 不支持直接跳转到解压数据中的任意位置。
  • 来源不明的 GZIP 文件应按不受信任文件处理。CRC-32 可以发现部分意外损坏,但不能证明内容可信。Gzip 能封装任意二进制数据,包括恶意可执行代码;畸形输入还可能在标志位和类似长度的字段中放入任意值。处理时应采用防御性解析、按需验证校验和,并且不要自动执行解压后的内容。
01

Gzip 压缩数据(.gz 和 .gzip)

Gzip 由 Jean-Loup Gailly 和 Mark Adler 设计,用于在不同 CPU 类型、操作系统、文件系统和字符集之间交换压缩数据,通常采用 DEFLATE 压缩。每个成员由文件头、可选的扩展字段、原文件名和注释字段、压缩数据块以及尾部组成;尾部记录 CRC-32 和以 2^32 为模的解压后大小。固定识别字节是十六进制 1F 8B,注册 MIME 类型是 application/gzip。

先把原文件留着

把 GZIP 转为另一种归档格式时,应先依次解压其成员,再用恢复出的原始数据字节创建目标归档。Gzip 压缩和解压本身是无损的,但转换无法恢复格式从未保存的元数据:gzip 不表示保护或所有权属性,保存的原文件名不包含目录部分,而且可能被规范化为小写。

02

怎么打开

GZ 或 GZIP 文件应使用兼容 gzip 的解压工具打开,例如 GNU gzip。在 Windows 上,选择明确支持 gzip 的本地压缩工具并执行解压;在 macOS 上,可使用兼容的图形工具或 GNU gzip;在手机上,应选择支持 gzip 的文件应用并执行解压,而不是直接预览压缩字节。合规解压器会检查 1F 8B 和压缩方法,正确跳过可选字段,并依次处理所有成员。完整性要求较高时还应验证 CRC-32。Gzip 不支持直接跳转到解压数据中的任意位置。

只想看看内容

GZ 或 GZIP 文件应使用兼容 gzip 的解压工具打开,例如 GNU gzip。在 Windows 上,选择明确支持 gzip 的本地压缩工具并执行解压;在 macOS 上,可使用兼容的图形工具或 GNU gzip;在手机上,应选择支持 gzip 的文件应用并执行解压,而不是直接预览压缩字节。合规解压器会检查 1F 8B 和压缩方法,正确跳过可选字段,并依次处理所有成员。完整性要求较高时还应验证 CRC-32。Gzip 不支持直接跳转到解压数据中的任意位置。

要发给别人

把 GZIP 转为另一种归档格式时,应先依次解压其成员,再用恢复出的原始数据字节创建目标归档。Gzip 压缩和解压本身是无损的,但转换无法恢复格式从未保存的元数据:gzip 不表示保护或所有权属性,保存的原文件名不包含目录部分,而且可能被规范化为小写。

03

文件安全

来源不明的 GZIP 文件应按不受信任文件处理。CRC-32 可以发现部分意外损坏,但不能证明内容可信。Gzip 能封装任意二进制数据,包括恶意可执行代码;畸形输入还可能在标志位和类似长度的字段中放入任意值。处理时应采用防御性解析、按需验证校验和,并且不要自动执行解压后的内容。

这几种情况先别打开

来路不明、文件名带两个后缀,或者内容和扩展名对不上——先停下来核对。

04

转换格式

把 GZIP 转为另一种归档格式时,应先依次解压其成员,再用恢复出的原始数据字节创建目标归档。Gzip 压缩和解压本身是无损的,但转换无法恢复格式从未保存的元数据:gzip 不表示保护或所有权属性,保存的原文件名不包含目录部分,而且可能被规范化为小写。

转换之前

先复制一份原文件再转换,转完对照看看画质、元数据和排版有没有变。

05

常见问题

GZIP 文件格式是什么,用来做什么?

GZIP 是一种面向数据交换的无损压缩格式,可跨不同 CPU、操作系统、文件系统和字符集使用。它通常采用 DEFLATE,并可顺序包含一个或多个压缩成员。

GZ 文件怎么打开和解压?

使用兼容 gzip 的解压工具,例如 GNU gzip。工具应识别 1F 8B、检查压缩方法、正确跳过可选字段,并按顺序处理全部成员。

Windows 怎么打开 GZIP 文件?

选择明确支持 gzip 的 Windows 本地压缩工具,然后执行解压。如果数据完整性很重要,应检查 CRC-32,并且不要自动运行解压出来的文件。

macOS 怎么打开 GZ 文件?

在 macOS 上使用兼容 gzip 的图形工具或 GNU gzip 解压。Gzip 是面向数据流的格式,因此软件通常按顺序处理压缩内容。

手机怎么解压 GZIP 文件?

选择明确支持 gzip 的手机文件应用,并使用其解压功能。解压后应根据实际文件类型处理,来源不明的文件不要自动执行。

GZIP 文件打不开或提示已损坏怎么办?

先检查文件开头是否为十六进制 1F 8B,并确认压缩方法受支持。CRC-32 不匹配、成员被截断、可选字段畸形或压缩块损坏都可能导致错误,而且严重损坏可能难以修复。

.gz 和 .gzip 有什么区别,应该使用哪个扩展名?

两个后缀都表示 gzip 压缩数据,但 RFC 6713 注册的扩展名是 gz。需要注册扩展名时使用 .gz,其他情况可遵循接收方的命名约定;内部格式应通过 1F 8B 而不是后缀单独判断。

GZIP 转换成 ZIP 会丢失什么,应该怎么转换?

先解压全部 gzip 成员,再用恢复的数据字节创建目标归档。数据字节可无损恢复,但 gzip 未保存的所有权、保护属性、原文件名中的目录部分以及可能被小写化前的名称无法保证恢复。

邮件或下载得到的 GZIP 文件安全吗?

不一定。CRC-32 只能帮助发现意外损坏,不能证明文件安全;gzip 可以包含任意二进制数据,包括恶意可执行代码。应防御性解析,且不要自动运行解压内容。

gzip 是否支持多个压缩成员和随机访问?

Gzip 文件可以顺序包含一个或多个成员,但不支持直接访问解压数据中的任意位置,因此软件一般把各成员作为数据流依次处理。

GZIP 文件可以不上传服务器直接检查吗?

可以。使用设备上的本地 gzip 兼容工具读取文件头或解压各成员,就不需要把文件发送到远程服务。

GZIP 文件头和 CRC-32 都有效,是否代表解压数据可信?

不是。1F 8B 只用于识别格式,CRC-32 主要用于发现意外损坏;两者都不能证明内容的来源、用途或安全性。

06

相关格式

资料来源

RFC 1952: GZIP File Format Specification Version 4.3 · RFC Editor / IETF publication

RFC 6713: The application/zlib and application/gzip Media Types · RFC Editor / IETF publication

IANA Media Types Registry · Internet Assigned Numbers Authority