我在 PHP 中有以下代码:
$text = gzcompress($text); // send $text to a python server
然后在 python 中我有以下代码:
text = request.POST.get('text', '') new_text = zlib.decompress(text)
但这失败了,因为解压缩函数需要字节,而我传递给它的是一个字符串。有人知道如何在 python 中解压缩在 php 中压缩的字符串吗?
PS:我对某个具体的算法或者函数不是特别感兴趣。
在你提供的 PHP 和 Python 代码中,PHP 使用了 gzcompress() 函数来压缩字符串,而 Python 试图用 zlib.decompress() 解压这个字符串。不过,问题出在 PHP 的 gzcompress() 返回的是一个字符串,而 zlib.decompress() 需要的是字节对象。为了解决这个问题,你只需确保在 Python 中传递的压缩数据是字节形式,而不是字符串。
gzcompress()
zlib.decompress()
确保传递给 Python 的数据是字节对象 在 PHP 中,gzcompress() 返回的是一个字节串,通常会被处理为字符串,但它实际上包含了字节数据。因此,在将其发送到 Python 服务器之前,你需要将 PHP 中的压缩数据以字节形式正确地发送。
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
修改 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 就是解压后的原始数据 ```
base64_encode()
base64.b64decode()
通过对压缩数据进行 Base64 编码和解码,可以确保数据在网络上传输时不受字符集和协议限制的影响。在 PHP 中进行编码,在 Python 中解码,然后解压缩,应该就能正常处理跨语言的压缩解压操作。