繁体   English   中英

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

[英]Different byte array for same string in golang and python

我正在使用 python gzip 模块压缩字符串并在 golang 中解压缩相同的字符串。

在python中压缩字符串的模块:

gzip.compress(json.dumps("hello").encode(),-1)

用于在 golang 中解压缩相同内容的模块:

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
}

获取错误: Gzip:invalid header

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

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

我试图重现,用这个代码(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 代码并显示原始字节吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM