我正在使用python gzip模块压缩字符串并在golang中解压缩该字符串。
在python中压缩字符串的模块:
func Decompression(compData []byte) ([]byte, error) {
gr, err := gzip.NewReader(bytes.NewBuffer(compData))
if err != nil {
return compData, err
}
defer gr.Close()
data, err := ioutil.ReadAll(gr)
if err != nil {
return nil, err
}
return data, err
}
用于在golang中解压缩模块的模块:
Gzip:invalid header
出错:{{1}}
在压缩和解压缩时使用相同的压缩级别。
任何人都可以指出我正在做的错误吗?
答案 0 :(得分:2)
我尝试使用此代码(python3)复制以生成文件out.bin
:
import gzip
import json
with open('out.bin', 'wb') as f:
f.write(gzip.compress(json.dumps("hello").encode(), -1))
print(json.dumps("hello"))
和这段代码来读取文件并解压缩(使用您的Decompression
函数:
package main
import (
"bytes"
"compress/gzip"
"fmt"
"io/ioutil"
)
func Decompression(compData []byte) ([]byte, error) {
gr, err := gzip.NewReader(bytes.NewBuffer(compData))
if err != nil {
return compData, err
}
defer gr.Close()
data, err := ioutil.ReadAll(gr)
if err != nil {
return nil, err
}
return data, err
}
func main() {
d, err := ioutil.ReadFile("out.bin")
if err != nil {
panic(err)
}
fmt.Printf("raw data: %q\n", string(d))
data, err := Decompression(d)
if err != nil {
panic(err)
}
fmt.Printf("decompressed: %q\n", string(data))
}
该组合可以正常工作。也许您没有以某种方式正确地从Python保存文件?您可以在数据文件上运行我的go代码并显示原始字节吗?