gzip 内容如何存储在文件中?

How are gzip content stored in a file?

我可以用“gzip”格式压缩某些内容并将其存储在文件中。此内容可以在我的代码中以编程方式解压缩。
但我不能使用命令行或其他工具“压缩”它们。例如“Hello World”(11 字节)被正确压缩为 'test.txt.gz',但在双击或从命令行中,它给出以下错误:

另一方面,如果我将相同的内容存储在 .txt 文件中并 gzip 那个 .txt,那么它就被正确解压了。

将 gzip 内容存储到文件中的正确方法是什么?


这里是 C++14 source code used for compression/decompression (Referred from: Compress string with GZip using qCompress?).
Hex dump (xxd -p /home/milind/Desktopp/test.txt.gz):

1f8b080000000000000b789cf348cdc9c95728cf2fca49010018ab043d52
9ed68b0b000000

问题是您编写了一个 gzip header,然后是 zlib-format 流!您需要在 gzip header 之后使用原始压缩数据,没有 zlib-format 包装器。

不要使用compress2(),它只能制作zlib 流。使用 deflate 函数,记录在 zlib.h 中。您可以请求 deflate 生成 gzip 流,这样您就不需要自己编写 header,也不需要自己进行 CRC-32 计算。这都是zlib提供的。