我有一条很长的JSON消息,其中包含超出ASCII表的字符。我将其转换为字符串,如下所示:
messStr = json.dumps(message,encoding='utf-8', ensure_ascii=False, sort_keys=True)
我需要使用将其大小限制为X字节的服务来存储此字符串。我想将JSON字符串分割成X长度的片段,并分别存储它们。我在执行此操作时遇到了一些问题(描述了here),因此我想压缩字符串片段来解决这些问题。我试着这么做:
ss = mStr[start:fin] # get piece of length X
ssc = zlib.compress(ss) # compress it
当我这样做时,我从zlib.compress
得到以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 225: ordinal not in range(128)
压缩UTF-8字符串的正确方法是什么,然后解压缩它的正确方法是什么?
您的JSON数据未编码。函数的
encoding
参数指示它如何解释message
(例如,输入)中的Python字节字符串,而不是如何对生成的输出进行编码。它根本不会对输出进行编码,因为您使用了ensure_ascii=False
。压缩前对数据进行编码:
当再次解压缩时,不需要从UTF-8解码;如果输入是bytestring,
json.loads()
函数将采用UTF-8。对马蒂金的反应有点补充。 我读到了一个漂亮的单行语句,它将使您无需在自己的代码中导入zlib。
安全地压缩字符串(包括json转储)如下所示:
减压回utf-8将是:
希望这有帮助。
相关问题 更多 >
编程相关推荐