小能豆

在php中压缩字符串并在python中解压缩

py

我在 PHP 中有以下代码:

$text = gzcompress($text);
// send $text to a python server

然后在 python 中我有以下代码:

text = request.POST.get('text', '')
new_text = zlib.decompress(text)

但这失败了,因为解压缩函数需要字节,而我传递给它的是一个字符串。有人知道如何在 python 中解压缩在 php 中压缩的字符串吗?

PS:我对某个具体的算法或者函数不是特别感兴趣。


阅读 25

收藏
2024-12-25

共1个答案

小能豆

在你提供的 PHP 和 Python 代码中,PHP 使用了 gzcompress() 函数来压缩字符串,而 Python 试图用 zlib.decompress() 解压这个字符串。不过,问题出在 PHP 的 gzcompress() 返回的是一个字符串,而 zlib.decompress() 需要的是字节对象。为了解决这个问题,你只需确保在 Python 中传递的压缩数据是字节形式,而不是字符串。

解决方案:

  1. 确保传递给 Python 的数据是字节对象
    在 PHP 中,gzcompress() 返回的是一个字节串,通常会被处理为字符串,但它实际上包含了字节数据。因此,在将其发送到 Python 服务器之前,你需要将 PHP 中的压缩数据以字节形式正确地发送。

  2. PHP 中的修改
    在 PHP 中,确保 gzcompress() 的返回值作为字节流发送到 Python 服务器(如果它是通过 HTTP 请求传递的,使用合适的编码,如 Base64 编码进行传输)。

修改 PHP 代码如下:

php $text = gzcompress($text); // 如果通过 HTTP 传输,使用 Base64 编码确保安全传输 $encoded_text = base64_encode($text); // send $encoded_text to the Python server

  1. Python 中的解压缩
    在 Python 端,接收到压缩数据后,你需要先对 Base64 编码的字符串进行解码,得到字节数据,然后再用 zlib.decompress() 进行解压缩。

修改 Python 代码如下:

```python
import zlib
import base64

# 获取传递过来的 Base64 编码的压缩数据
text = request.POST.get(‘text’, ‘’)

# 解码 Base64 字符串,得到压缩的字节数据
compressed_text = base64.b64decode(text)

# 解压缩字节数据
new_text = zlib.decompress(compressed_text)

# 现在 new_text 就是解压后的原始数据
```

解释:

  • 在 PHP 端使用 base64_encode() 对压缩的字节数据进行编码。这是因为 HTTP 协议通常不能直接传输字节数据,因此需要对其进行编码。Base64 编码将二进制数据转换为字符数据,适合通过 HTTP 请求发送。
  • 在 Python 端,接收到 Base64 编码的数据后,使用 base64.b64decode() 解码得到原始的字节数据,然后再使用 zlib.decompress() 对其进行解压缩。

总结:

通过对压缩数据进行 Base64 编码和解码,可以确保数据在网络上传输时不受字符集和协议限制的影响。在 PHP 中进行编码,在 Python 中解码,然后解压缩,应该就能正常处理跨语言的压缩解压操作。

2024-12-25