Я пытаюсь отправить JSON из кода C ++ в службу REST, работающую на Java. Я использую Visaul Studio 2019, библиотеку nlohmann / json для сериализации моих объектов и libcurl для выполнения HTTP-запроса.
У меня есть следующий объект, который я хочу сериализовать:
typedef struct{
int ordinal;
std::string detail;
Level level;
} LogType
static const LogType ONLINE = {0, "Çevrimiçi", Level::INFO};
Iиспользуйте этот LogType для заполнения некоторых членов AliveLog (очень похоже на перечисления Java). И я использую следующее для его сериализации:
std::string AliveLog::getJSON(){
json j = json{
{"createdAt", createdAt},
{"id", id},
{"message", message},
{"detail", detail},
{"deviceId", deviceId},
{"type", type.ordinal},
{"level", level}
};
return j.dump(-1, ' ', false, json::error_handler_t::replace);
}
Когда я вызываю эту функцию, я получаю кучу вопросительных знаков и ½, где "Çevrimdışı" должно быть.
Также моя служба REST выдаетисключение Ошибка синтаксического анализа JSON: Неверный средний байт UTF-8 0xdd;
Я попытался установить параметры / utf8 и / validate-charset для параметров командной строки компилятора, но безрезультатно.
Если я просто использую j. dump () без аргумента выдает исключение, говорящее «type_error.316, если строка, хранящаяся внутри значения JSON, не кодирована в UTF-8». В моем текстовом редакторе я выбрал «Автоопределение кодировки UTF-8 без подписи».
Этот же кусок кода прекрасно работает на Java, я пытаюсь сделать его версию на C ++.
edit: добавлено больше информации относительно LogType и AliveLog