[英]Using python, how can I compress a long query string value?
因此,我正在python中为GET请求生成一个URL(必须是GET请求),而我的查询字符串参数之一是EXTREMELY long(〜900个字符),有什么办法可以压缩此字符串并将其放在网址? 我尝试过zlib
但是它使用字节,并且url需要为字符串。 基本上有什么方法可以做到这一点?
# On server
x = '900_char_string'
compressed_string = compress(x)
return 'http://whatever?querystring_var=' + compressed_string
# ^ return value is what client requests by clicking link with that url or whatever
# On client
# GET http://whatever?querystring_var=randomcompressedchars<900
# Server receiving request
value = request['querystring_var']
y = decompress(value)
print(y)
>>> 900_char_string # at this point server can work with the uncompressed string
现在,这个问题已经很清楚了。 我认为我们需要从信息论的角度对此进行研究。
利用以下三个主要途径可以缩短代表人数:
前两种方法可以加长结果字符串,因为它们需要从转换表开始。 另外,由于您的字符串似乎取自统一的随机分布,因此不会产生冗余或通用性。 当香农熵等于或接近输入令牌的最大值时,这些方法将无济于事。
这使我们有了基础转换。 我们使用8位(256个组合)表示仅82个字符的字母。 一个简单的基本转换将节省大约20%; 比率是log(82)/ log(256)。 如果您想要便宜的转换,只需将其映射到7位表示中,可节省12.5%
很简单,在字符集上定义符号序号,例如
0123456789ABCDEFGH...YZabcd...yz:/?#[]()@!$%&'*+,;=% (81 chars)
现在,计算给定字符串的等效数值,就好像您是手工编码从十进制或十六进制字符串的转换一样。 所得的大整数是压缩值。 以字节为单位写出,或将其切成32位整数,或适合您的中间存储介质的任何形式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.