在Twisted Resource中,我将返回一个json编码的dict作为下面的响应var。这些数据是一个包含姓名,guid和其他几个字段的5个人的列表,每个字段长度不超过32个字符,所以数据量不大。
我经常得到这个OverflowError异常,但我不太清楚utf-8序列长度不支持的含义。
self.request.write(ujson.dumps(response))
exceptions.OverflowError:不支持的UTF-8序列长度 编码字符串
答案 0 :(得分:8)
请注意,我最近遇到了同样的错误,并且可以给出一点背景知识。
如果你看到这个,你可能会尝试用python中的ujson json编码一个Mongo对象。
使用本机python库,我们会收到更有用的错误消息:
TypeError: ObjectId('510652d322fc956ca9e41342') is not JSON serializable
ujson试图解析一个ObjectId python对象并迷路。有一些选项,最直接的是在保存之前从Mongo擦除'_id'字段。你也可以将ujson子类化,以某种方式将ObjectIds解析或制作成一个简单的字符串。
答案 1 :(得分:3)
如有疑问,请查看来源:http://code.google.com/p/rapidjson/source/browse/trunk/thirdparty/ultrajson/ultrajsonenc.c
当UTF-8长度为5或6个字节时,会发生此错误。这个JSON实现没有实现。如果您在浏览器中使用数据,那么这些字符将无效,因为它们超出了UTF-16的范围。
如果这经常发生,我会感到惊讶;它只发生在U + 1FFFFF上的Unicode代码点上,这种情况非常罕见,大多数Python版本甚至不支持Unicode字符串,因为它超出了这个范围。您应该找出这些字符出现在数据中的原因。