Ошибка символа UTF-8 CouchDB

Я пытаюсь написать приложение, полностью совместимое с utf-8, с CouchDB в качестве серверной части. Я использую C ++ с пакетом casablanca rest sdk для отправки запросов на Couch версии 1.6.1. Чтобы проверить, может ли приложение обрабатывать различные символы Юникода, у меня есть тестовая строка в объекте JSON, который я хочу ПОЛУЧИТЬ на диван. Строка отформатирована как таковая (c ++)

const string_t InternationalText = 
L"Hello world!123#@%\n\r\v\t\f Å i åa ä e ö 
\u00c5 \u00fc \u03bb \u0416 \u4e16\u754c\u548c\u5e73 \U00013080";

Последний символ в строке, \ U00013080 Глаз Гора, вызывает у меня проблемы. Я получаю 400 неверных запросов от Couch, и если я смотрю в журнал, я вижу ошибку «лексическая ошибка: недопустимый символ внутри строки».

Я провел некоторое сниффинг, используя RawCap, чтобы захватить цикл запроса-ответа, и важные части моего запроса:

PUT *address*
Content-Type: application/json;charset=utf-8
Body: *Complex Json object containing the string as such*

{"description"="Hello world!123#@% Å i åa ä e ö Å ü λ Ж 世界和平 ????",...}

Если я посмотрю на шестнадцатеричный код запроса, символ Глаза Гора закодирован как F0 93 82 80, что согласно https://codepoints.net/U+13080 правильный. Тем не менее, я получаю ошибку UTF-8. Что мне не хватает? Есть ли у CouchDB проблемы с символами из плоскости 1+ в стандарте юникода?

Излишне говорить, что все работает нормально, если убрать иероглиф.


person Litterate    schedule 18.05.2015    source источник


Ответы (1)


Я нашел проблему. Оказывается, \ v является недопустимым символом для JSON, http://tools.ietf.org/html/rfc7159, и удаление этого решает мою проблему. Меня бросило в глаза какое-то странное поведение в среде модульного тестирования Visual Studio, которая прошла тест, когда я удалил последний символ в своей тестовой строке, хотя в вызове все еще были ошибки.

person Litterate    schedule 18.05.2015