在Twisted资源中,我将返回一个json编码的dict作为下面的响应var.这些数据是一个包含姓名,guid和其他几个字段长度不超过32个字符的5个人的列表,因此不是大量的数据.
我经常得到这个OverflowError异常,但我不太明白不支持的utf-8序列长度是指什么.
self.request.write(ujson.dumps(response))
Run Code Online (Sandbox Code Playgroud)
exceptions.OverflowError:编码字符串时不支持的UTF-8序列长度
Pet*_*r V 12
只是注意到我最近遇到了同样的错误,并且可以给出一点背景知识.
如果你看到这个,你可能会尝试用python中的ujson json编码一个Mongo对象.
使用本机python库,我们得到一个更有用的错误消息:
TypeError: ObjectId('510652d322fc956ca9e41342') is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
ujson试图解析一个ObjectId python对象并迷路.有一些选项,最直接的是在保存之前从Mongo擦除'_id'字段.您还可以将ujson子类化,以某种方式解析或将ObjectIds解析为一个简单的字符串.
如有疑问,请检查来源: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 字符串。您应该找出这些字符出现在数据中的原因。