Luc*_*ild 2 javascript python compression pako
我正在尝试压缩字典以访问 API。
我阅读了某人用 JavaScript 和一个名为“pako”的库压缩数据的代码,并自己尝试了。它工作完美:
var myDictionary = {...}
var b = pako.deflate(JSON.stringify(a), {
to: "string",
gzip: !0
});
return b = btoa(b)
}
var compressed = b(n)
Run Code Online (Sandbox Code Playgroud)
现在我想用Python做同样的事情:我尝试了以下方法,但结果不同并且不起作用:
my_dictionary = {...}
data_json = json.dumps(my_dictionary, ensure_ascii=False)
data_gzip = zlib.compress(bytes(data_json, "utf-8"))
compressed = base64.b64encode(bytes(str(data_gzip), "utf-8"))
Run Code Online (Sandbox Code Playgroud)
有谁知道如何用Python解决这个问题吗?Python 是否有类似 pako 的库?
如果有人仍在 python 3 中寻找 pako 等效方法(未在 python 2 中测试)。
python 中的 pako.deflate() 方法等效:
def pako_deflate(data):
compress = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, 15,
memLevel=8, strategy=zlib.Z_DEFAULT_STRATEGY)
compressed_data = compress.compress(js_string_to_byte(js_encode_uri_component(data)))
compressed_data += compress.flush()
return compressed_data
Run Code Online (Sandbox Code Playgroud)
pako.deflateRaw() 在 python 中等效:
def pako_deflate_raw(data):
compress = zlib.compressobj(
zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, -15, memLevel=8,
strategy=zlib.Z_DEFAULT_STRATEGY)
compressed_data = compress.compress(js_string_to_byte(js_encode_uri_component(data)))
compressed_data += compress.flush()
return compressed_data
Run Code Online (Sandbox Code Playgroud)
pako.inflate() 方法等效:
def pako_inflate(data):
decompress = zlib.decompressobj(15)
decompressed_data = decompress.decompress(data)
decompressed_data += decompress.flush()
return decompressed_data
Run Code Online (Sandbox Code Playgroud)
pako.inflateRaw() 等效方法:
def pako_inflate_raw(data):
decompress = zlib.decompressobj(-15)
decompressed_data = decompress.decompress(data)
decompressed_data += decompress.flush()
return decompressed_data
Run Code Online (Sandbox Code Playgroud)
上述函数中使用的一些实用函数是:
from urllib.parse import quote, unquote
import base64
def js_encode_uri_component(data):
return quote(data, safe='~()*!.\'')
def js_decode_uri_component(data):
return unquote(data)
def js_string_to_byte(data):
return bytes(data, 'iso-8859-1')
def js_bytes_to_string(data):
return data.decode('iso-8859-1')
def js_btoa(data):
return base64.b64encode(data)
def js_atob(data):
return base64.b64decode(data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4223 次 |
| 最近记录: |