gpt4 book ai didi

python - python 中的 UTF-8 兼容压缩

转载 作者:太空狗 更新时间:2023-10-30 01:56:00 26 4
gpt4 key购买 nike

我想在 json 数据包中包含一个大的压缩字符串,但遇到了一些困难。

import json,bz2
myString = "A very large string"
zString = bz2.compress(myString)
json.dumps({ 'compressedData' : zString })

这将导致

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 10-13: invalid data

一个明显的解决方案是 bz2'ing 整个 json 结构,但我们假设我正在使用一个执行 json 编码的黑盒 api,它需要一个字典。

此外,我只是以 bz2 为例,虽然我注意到 zlib 有相同的行为,但我并不真正关心实际算法是什么。

我能理解为什么这两个压缩库不能创建 utf-8 兼容的输出,但是有什么解决方案可以有效地压缩 utf-8 字符串吗?这个页面就像一座金矿 http://unicode.org/faq/compression.html但我找不到任何相关的 python 信息。

最佳答案

您的意思是“将压缩为 UTF-8 字符串”?我会假设,因为任何通用压缩器都会压缩 UTF-8 字符串。但是,现实世界中没有任何压缩器会将 压缩为 UTF-8 字符串。

不能像UTF-8那样直接在JSON中存储8位数据,因为JSON字符串定义为Unicode。在将数据提供给 JSON 之前,您必须对其进行 base64 编码:

json.dumps({ 'compressedData' : base64.b64encode(zString) })

但是,base64 本身会导致 4/3 的编码开销。如果您正在压缩典型的字符串数据,您可能会获得足够的压缩,这仍然是一个胜利,但这是一个很大的开销。您可能会发现一种开销较少但不会太多的编码。

请注意,如果您使用它向浏览器发送数据,最好让 HTTP 压缩来执行此操作;它得到广泛支持,并且会更加强大。

关于python - python 中的 UTF-8 兼容压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3929301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com