Почему я получаю недопустимые ошибки UTF8? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь отправить 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

...