OverflowError:当>时,不支持的UTF-8序列长度编码字符串

时间:2011-12-07 20:41:58

标签: python twisted

在Twisted Resource中,我将返回一个json编码的dict作为下面的响应var。这些数据是一个包含姓名,guid和其他几个字段的5个人的列表,每个字段长度不超过32个字符,所以数据量不大。

我经常得到这个OverflowError异常,但我不太清楚utf-8序列长度不支持的含义。

self.request.write(ujson.dumps(response))
  

exceptions.OverflowError:不支持的UTF-8序列长度   编码字符串

2 个答案:

答案 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字符串,因为它超出了这个范围。您应该找出这些字符出现在数据中的原因。