python - 发送在 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
文件格式差异有问题吗?
解决方案
你的 python 程序生成的数据流实际上不是一个.gz
文件,它是一个原始的 DEFLATE 流。如果您想要一个.gz
-file(包括flate2::read::GzDecoder
预期的 gz-header),请gzip
在 Python 中使用该模块。如果您确实需要原始 DEFLATE 流(由 生成zlib.compress
),请使用flate2::read::DeflateDecoder
来解压缩数据。
推荐阅读
- node.js - 系统验证失败 - Node / Express / Mongoose
- javascript - 返回其他函数 JavaScript 的函数
- c++ - 使用递归时平衡的二叉树结构,EXC_BAD_ACCESS
- java - 无法让网络服务向我询问 char
- android - 在android视图的画布中的给定点以给定字体绘制单个字符/字形的最有效方法是什么?
- c - 用 C 编写的基本计算器仅添加
- julia - 在 Julia 中是否有一种优雅的方式来“不参与”?
- javascript - 将激光存储在阵列中,然后根据当前枪绘制“X”数量的激光
- python - Python 错误“ZeroDivisionError:浮点除以零”
- c# - 如何修复跨机器的字符串比较