首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中兼容UTF-8的压缩

python中兼容UTF-8的压缩
EN

Stack Overflow用户
提问于 2010-10-14 09:03:38
回答 1查看 1.9K关注 0票数 4

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

代码语言:javascript
复制
import json,bz2
myString = "A very large string"  
zString = bz2.compress(myString)
json.dumps({ 'compressedData' : zString })

这将导致一个

代码语言:javascript
复制
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 10-13: invalid data

一个显而易见的解决方案是对整个json结构进行bz2,但让我们假设我使用的是一个执行json编码的黑盒api,它需要一个dict。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-14 09:19:11

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

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

代码语言:javascript
复制
json.dumps({ 'compressedData' : base64.b64encode(zString) })

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

请注意,如果您使用它将数据发送到浏览器,最好让HTTP压缩来做这件事;它得到了广泛的支持,而且更加健壮。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3929301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档