Python 溢出错误:当>;时,不支持UTF-8序列长度;编码字符串

Python 溢出错误:当>;时,不支持UTF-8序列长度;编码字符串,python,twisted,Python,Twisted,在Twisted资源中,我返回一个json编码的dict作为下面的响应变量。数据是一个由5个人组成的列表,其中包括姓名、guid和两个其他字段,每个字段的长度小于32个字符,因此没有大量数据 我经常遇到这种溢出错误异常,但我不太明白不支持的utf-8序列长度指的是什么 self.request.write(ujson.dumps(response)) 异常。溢出错误:当 编码字符串 如有疑问,请检查来源: UTF-8长度为5或6字节时会发生此错误。这个JSON实现没有实现这一点。如果在浏览器中

在Twisted资源中,我返回一个json编码的dict作为下面的响应变量。数据是一个由5个人组成的列表,其中包括姓名、guid和两个其他字段,每个字段的长度小于32个字符,因此没有大量数据

我经常遇到这种溢出错误异常,但我不太明白不支持的utf-8序列长度指的是什么

self.request.write(ujson.dumps(response))
异常。溢出错误:当 编码字符串


如有疑问,请检查来源:

UTF-8长度为5或6字节时会发生此错误。这个JSON实现没有实现这一点。如果在浏览器中使用数据,这些字符将无法工作,因为它们超出了UTF-16的范围


如果这种情况真的经常发生,我会感到惊讶;这种情况只会发生在U+1FFFF上的Unicode代码点上,这种情况非常罕见,而且由于超出此范围,大多数Python版本甚至不支持Unicode字符串。您应该找出这些字符出现在数据中的原因。

请注意,我最近遇到了同样的错误,可以提供一些背景信息

如果您看到这一点,那么您可能正在尝试用python中的ujson对Mongo对象进行json编码

使用本机python库,我们得到一条更有用的错误消息:

TypeError: ObjectId('510652d322fc956ca9e41342') is not JSON serializable

ujson试图解析ObjectId python对象,但却迷失了方向。有几个选项,最直接的是在保存之前从Mongo中擦除“\u id”字段。您还可以将ujson子类化,以某种方式将ObjectId解析或转换为简单字符串。

谢谢Glenn。仍然习惯于Python,认为这是一个扭曲的问题,没有想到去看ujson,因为它可以很好地处理其他数据。数据确实是通过套接字连接进入应用程序的,所以这很可能是罪魁祸首。非常感谢。我不明白为什么“在BMP之外”与浏览器是否可以为特定代码点渲染glyph的问题特别相关。在我看来,这也是实现中的一个bug;JSON规范非常明确,“char”是“除了双引号、反斜杠或控制字符以外的任何Unicode字符”。@Karl:只是一个输入错误;重要的是范围:[0,0x1ffff]。JavaScript使用UTF-16,它只能表示该范围内的代码点。实际上,输出ASCII的JSON序列化程序使用UTF-16代理,并且只能输出这个范围;JSON没有8字节的Unicode转义。结果是,我将数据存储在MongoDB中。错误来自Mongo从db返回的默认_id值。我取消了那个字段的设置,错误就消失了。再次感谢您为我指明了正确的方向。我试图在
bson.py
(pymongo)中修改
json_util
,并将
import json
替换为
import ujson,因为json
无效,他们不共享这些方法:(您保存了这一天。这可以通过将
default\u handler
参数设置为
str
来解决,如下所示:
jsonResult=df.to\u json(default\u handler=str)
。这个问题已经在这里讨论过了:并且包含了一些解释。查看
响应
内容,并尝试对其中的字节字符串进行编码。当我有一个
uuid.uuid4()
列表时,我出现了这个错误,但我应该做
str(uuid.uuid4())
@Martintoma:谢谢你的洞察力。这也为我解决了这个问题