[英]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.