为什么我会收到无效的UTF8错误?

时间:2019-11-08 09:00:22

标签: c++ json visual-studio utf-8 nlohmann-json

我正在尝试将C ++代码中的JSON发送到Java上运行的REST服务。我正在使用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};

我使用此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(),它将引发异常,提示“如果存储在JSON值中的字符串不是UTF-8编码的,则为type_error.316”。在我的文本编辑器中,选择了“自动检测不带签名的UTF-8编码”。

同一段代码可以用Java很好地编写,我正在尝试使其成为C ++版本。

编辑:添加了有关LogType和AliveLog的更多信息

0 个答案:

没有答案