- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何正确压缩字符串,以便 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. đóng();
return compressed;
}
但 PHP 无法将输出识别为有效的 GZip 压缩字符串...
问题似乎出在 Android 添加的某些页眉/页脚中......
例如,当我使用 gzcompress
通过 PHP 压缩 something
词时,我得到了与 Android 类似的结果,但不够相似,因此 PHP 可以读取它:
东西
(十六进制转储):
Android:1f8b08000000000000002bcecf4d2dc9c8cc4b0700
fb31da0909000000
PHP:789c2bcecf4d2dc9c8cc4b0700
134703cf
最奇怪的是,通过将 GZOutputStream
更改为 DeflaterOutputStream
它解决了 something
字的问题,但是问题仍然出现在更长的字符串上...
附言。从 Android 生成的数据中删除标题 10 个字符根本没有帮助。
biên tập:我尝试用 PHP 解压它:
gzdecode()
- 这个函数在标准的 Debian PHP5 中不存在版本。gzdecompress()
- 不起作用还有一些从 PHP 站点评论中模拟 gzdecode()
的函数,这些函数实际上并没有做太多事情。
以上所有,删除前 10 个字节并保留它们。
PS2。我尝试了 Stack Overflow 和其他来源的每一个解决方案,但仍然一无所获。它不是重复的。
EDIT2 (BINARY DUMP):Android 生成的样本数据,无法被 gzuncompress()
hoặc pseudo-gzdecode()
解压> 来自 PHP.NET
的函数:data.compressed .
解压后应该是一些JSON。
câu trả lời hay nhất
以1f8b
开头的Android数据是一个gzip流。在 php 中,您为此使用 gzdecode()
。 PHP 上的 gzencode()
生成 gzip 流。
以789c
开头的php数据是一个zlib流。您使用了 gzcompress()
来制作它,您将使用 gzuncompress()
来解码它。
这两个流中包含的压缩数据,以 2bce
开头,是原始压缩数据。如果你碰巧把它放在某个地方,你可以使用 gzinflate()
对其进行解码,并且你可以使用 gzdeflate()
生成原始压缩。
只是吐槽一下,gzencode()
、gzcompress()
Và 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/
如何正确压缩字符串,以便 PHP 能够解压缩? 我试过这个: public static byte[] compress(String string) throws IOException {
Tôi là một lập trình viên xuất sắc, rất giỏi!