golang和python中相同字符串的不同字节数组

时间:2019-12-25 12:48:55

标签: python python-3.x go compression gzip

我正在使用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}}

在压缩和解压缩时使用相同的压缩级别。

任何人都可以指出我正在做的错误吗?

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代码并显示原始字节吗?