首页 > 解决方案 > 发送在 Python 中压缩的 zip 存档但尝试在 Rust 中解压缩的问题

问题描述

我有这段代码在 Python中用zlib( ) 压缩数据gzip

dta = bytes(str("..."))
res = zlib.compress(dta)
with open('packed.gz', 'wb') as f:
    f.write(t)

我想用 Rust 打开它

use std::io::prelude::*;
use flate2::read::GzDecoder; // flate2 = "1.0"
use std::fs::File;

fn main() {
    let f = File::open("packed.gz").unwrap();
    let mut d = GzDecoder::new(f);
    let mut s = String::new();
    d.read_to_string(&mut s).unwrap();
    println!("{}", s);
}

我得到

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Custom { kind: InvalidInput, error: "invalid gzip header" }', src/main.rs:11:30

文件格式差异有问题吗?

标签: pythonrustgzip

解决方案


你的 python 程序生成的数据流实际上不是一个.gz文件,它是一个原始的 DEFLATE 流。如果您想要一个.gz-file(包括flate2::read::GzDecoder预期的 gz-header),请gzip在 Python 中使用该模块。如果您确实需要原始 DEFLATE 流(由 生成zlib.compress),请使用flate2::read::DeflateDecoder来解压缩数据。


推荐阅读