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

Cod*_*er1 5 python twisted

在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解析为一个简单的字符串.

  • 这可以通过将“default_handler”参数设置为“str”来解决,如下所示:“jsonResult = df.to_json(default_handler=str)”。该问题已在这里讨论:https://github.com/pandas-dev/pandas/issues/14256 并包含解释。 (2认同)

Gle*_*ard 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 字符串。您应该找出这些字符出现在数据中的原因。

  • 结论是,我将数据存储在 MongoDB 中。该错误来自 Mongo 从数据库返回的默认 _id 值。我取消了该字段的设置,错误就消失了。再次感谢您为我指明了正确的方向。 (2认同)