缺点是输出必须编码为UTF8或ISO-8859-1。
我尝试使用base64_encode(gzdeflate($string, 9))
,但结果最终会超过原始字符串。
有人可以想办法吗?
由于
答案 0 :(得分:3)
压缩数据基本上是二进制的 - 它没有字符集,它只是一个字节序列。 base64基本上将输入的大小增加了大约1.33倍,所以除非将字符串压缩到原始大小的.66左右,否则你将会失败。
更大的问题是为什么需要重新编码压缩数据?如果输出原始字节,它是显示为“纯文本”而不是随机的“垃圾”吗?
答案 1 :(得分:1)
base64编码会增加开销,因为您要将二进制文件转换为纯文本。如果您的字符串很短,则此开销将大于压缩的增益。但是,这种方法在大字符串上应该可以正常工作。
答案 2 :(得分:0)
好的base64编码显然会破坏你所有的节省,因为它将大小增加了至少8/6(在正确的实现中实际上更多一点)
如果ISO-8859-1是指IANA定义的字符集,则可以使用它对二进制数据进行编码,因为所有255个值都已定义(尽管它包含控制字符)。另一方面,ISO 8859-1(注意缺少的连字符)没有定义所有255个值,UTF-8也是不可能的。
如果你的空间节省超过14%,你可以使用7位/ 8位编码,只需保留MSB 0(对于UTF8,但仍适用于控制序列)