I Z*_*I Z 7 python compression json utf-8 python-2.x
我有一个非常长的JSON消息,其中包含超出ASCII表的字符.我把它转换成一个字符串如下:
messStr = json.dumps(message,encoding='utf-8', ensure_ascii=False, sort_keys=True)
Run Code Online (Sandbox Code Playgroud)
我需要使用将其大小限制为X字节的服务来存储此字符串.我想将JSON字符串拆分为长度为X的片段并分别存储它们.我遇到了一些问题(这里描述)所以我想压缩字符串切片来解决这些问题.我试着这样做:
ss = mStr[start:fin] # get piece of length X
ssc = zlib.compress(ss) # compress it
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误zlib.compress:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 225: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
压缩UTF-8字符串的正确方法是什么,然后解压缩它的正确方法是什么?
Lyn*_*Lab 12
Martijn回应的一点点补充.我在Enthought博客中读到了一个漂亮的衬垫语句,它将使您无需在自己的代码中导入zlib.
安全地压缩字符串(包括你的json转储)看起来像这样:
ssc = ss.encode('utf-8').encode('zlib_codec')
Run Code Online (Sandbox Code Playgroud)
解压缩回utf-8将是:
ss = ssc.decode('zlib_codec').decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
您的JSON数据不是 UTF-8编码的.函数的encoding参数json.dumps()指示它如何解释message(例如输入)中的Python字节串,而不是如何对结果输出进行编码.它不输出编码可言,因为你使用ensure_ascii=False.
压缩前对数据进行编码:
ssc = zlib.compress(ss.encode('utf8'))
Run Code Online (Sandbox Code Playgroud)
再次解压缩时,无需从UTF-8解码; json.loads()如果输入是字节串,则该函数假定为UTF-8.
| 归档时间: |
|
| 查看次数: |
11184 次 |
| 最近记录: |