OverflowError: Неподдерживаемая длина последовательности UTF-8, когда> строка кодирования - PullRequest
3 голосов
/ 08 декабря 2011

Внутри Twisted Resource я возвращаю зашифрованный файл в формате json в качестве ответа ниже. Данные представляют собой список из 5 человек с полями name, guid и несколькими другими полями длиной не более 32 символов в каждом, так что нет тонны данных.

Я получаю это исключение OverflowError довольно часто, но я не совсем понимаю, к чему относится неподдерживаемая длина последовательности utf-8.

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

exceptions.OverflowError: Неподдерживаемая длина последовательности UTF-8, когда строка кодирования

Ответы [ 2 ]

8 голосов
/ 28 января 2013

Просто обратите внимание, что я недавно столкнулся с этой же ошибкой, и может дать немного фона.

Если вы видите это, возможно, вы пытаетесь json кодировать объект Mongo с помощью ujson в python.

Используя собственную библиотеку python, мы получаем более полезное сообщение об ошибке:

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

ujson каким-то образом пытается разобрать объект Python ObjectId и теряется. Есть несколько вариантов, наиболее прямой из которых является очистка поля _id от Mongo перед сохранением. Вы также можете создать подкласс ujson, чтобы каким-то образом анализировать или превращать ObjectIds в простую строку символов.

3 голосов
/ 08 декабря 2011

В случае сомнений проверьте источник: http://code.google.com/p/rapidjson/source/browse/trunk/thirdparty/ultrajson/ultrajsonenc.c

Эта ошибка возникает, когда длина UTF-8 составляет 5 или 6 байтов.Эта реализация JSON не реализует это.Эти символы не будут работать, если вы все равно используете данные в браузере, поскольку они находятся вне диапазона UTF-16.

Я был бы удивлен, если бы это действительно часто происходило;это произошло бы только с кодовыми точками Unicode над U + 1FFFFF, которые крайне редко встречаются и даже не поддерживаются в строках Unicode большинством сборок Python из-за того, что они находятся вне этого диапазона.Вы должны выяснить, почему эти символы появляются в ваших данных.

...