python中与UTF8兼容的压缩

2024-10-04 01:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在json包中包含一个大的压缩字符串,但是有点困难。在

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

这将导致

^{pr2}$

一个明显的解决方案是对整个json结构进行bz2处理,但是我们假设我使用的是一个blackbox api,它执行json编码,它需要dict

另外,我只是以bz2为例,我并不关心实际的算法是什么,尽管我注意到zlib有相同的行为。在

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


Tags: 字符串importjsonstring解决方案compressutfvery
1条回答
网友
1楼 · 发布于 2024-10-04 01:25:00

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

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

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

但是,base64固有地导致4/3编码开销。如果你压缩典型的字符串数据,你可能会得到足够的压缩,这仍然是一个胜利,但这是一个巨大的开销。您可能会发现一种开销较小但不多的编码。在

请注意,如果您使用它来向浏览器发送数据,那么最好让HTTP压缩来完成这项工作;它受到广泛支持,并且会更加健壮。在

相关问题 更多 >