我有这段代码用 zlib
压缩数据( gzip
) 在 Python 中
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
文件格式差异有问题吗?
最佳答案
你的python程序生成的数据流实际上不是.gz
-file,它是一个原始的 DEFLATE 流。如果您想要 .gz
-file(包括 flate2::read::GzDecoder
期望的 gz 头文件),使用 gzip
Python 中的模块。如果您确实想要原始 DEFLATE 流(由 zlib.compress
生成),请使用 flate2::read::DeflateDecoder
解压缩数据。
关于python - 发送在 Python 中压缩的 zip 存档但尝试在 Rust 中解压缩的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64170883/