gpt4 book ai didi

php - 在 Android 中编码字符串以便 PHP 能够 gzdecompress 它?

转载 作者:搜寻专家 更新时间:2023-11-01 08:46:20 28 4
gpt4 key购买 nike

如何正确压缩字符串,以便 PHP 能够解压缩?

我试过这个:

public static byte[] compress(String string) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream(string.length());
DeflaterOutputStream gos = new DeflaterOutputStream(os);
// ALSO TRIED GZOutputStream, same results!
gos.write(string.getBytes());
gos.close();
byte[] compressed = os.toByteArray();
os.close();
return compressed;
}

但 PHP 无法将输出识别为有效的 GZip 压缩字符串...

问题似乎出在 Android 添加的某些页眉/页脚中......

例如,当我使用 gzcompress 通过 PHP 压缩 something 词时,我得到了与 Android 类似的结果,但不够相似,因此 PHP 可以读取它:

东西(十六进制转储):

Android:1f8b08000000000000002bcecf4d2dc9c8cc4b0700fb31da0909000000

PHP:789c2bcecf4d2dc9c8cc4b0700134703cf

最奇怪的是,通过将 GZOutputStream 更改为 DeflaterOutputStream 它解决了 something 字的问题,但是问题仍然出现在更长的字符串上...

附言。从 Android 生成的数据中删除标题 10 个字符根本没有帮助。


编辑:我尝试用 PHP 解压它:

  • gzdecode() - 这个函数在标准的 Debian PHP5 中不存在版本。
  • gzdecompress() - 不起作用

还有一些从 PHP 站点评论中模拟 gzdecode() 的函数,这些函数实际上并没有做太多事情。

以上所有,删除前 10 个字节并保留它们。

PS2。我尝试了 Stack Overflow 和其他来源的每一个解决方案,但仍然一无所获。它不是重复的。


EDIT2 (BINARY DUMP):Android 生成的样本数据,无法被 gzuncompress()pseudo-gzdecode() 解压> 来自 PHP.NET 的函数:data.compressed .

解压后应该是一些JSON。

最佳答案

1f8b开头的Android数据是一个gzip流。在 php 中,您为此使用 gzdecode()。 PHP 上的 gzencode() 生成 gzip 流。

789c开头的php数据是一个zlib流。您使用了 gzcompress() 来制作它,您将使用 gzuncompress() 来解码它。

这两个流中包含的压缩数据,以 2bce 开头,是原始压缩数据。如果你碰巧把它放在某个地方,你可以使用 gzinflate() 对其进行解码,并且你可以使用 gzdeflate() 生成原始压缩。

只是吐槽一下,gzencode()gzcompress()gzdeflate() 是有史以来最具误导性的函数名称,因为其中只有一个与 gzip 有关,但都以 gz 开头,并且 gzcompress() 名称中没有任何内容表示 zlib。

更新:

出于某种原因,“EDIT2”数据被双重压缩。它首先被压缩为 zlib 格式,然后 zlib 流被压缩为 gzip 格式。 (虽然 gzip 不能压缩已经压缩的数据,所以它有点大。)

您应该修复导致其双重压缩的问题。或者,如果您无法控制它,您可以对其进行双重解压缩,首先使用 RFC 1952 规范剥离 gzip header ,然后对原始 deflate 数据使用 gzinflate(),然后使用 gzdecompress () 在结果上。

关于php - 在 Android 中编码字符串以便 PHP 能够 gzdecompress 它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909435/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com