首页 > 解决方案 > 为什么我会收到无效的 UTF8 错误?

问题描述

我正在尝试将 JSON 从 C++ 代码发送到在 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 parse error: Invalid UTF-8 middle byte 0xdd;

我尝试为编译器命令行选项设置 /utf8 和 /validate-charset 但无济于事。

如果我只使用不带参数的 j.dump() ,它会抛出一个异常“type_error.316 如果存储在 JSON 值中的字符串不是 UTF-8 编码的”。在我的文本编辑器中,我选择了“自动检测不带签名的 UTF-8 编码”。

这段代码用 Java 写得很好,我正在尝试制作它的 C++ 版本。

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

标签: c++jsonvisual-studioutf-8nlohmann-json

解决方案


推荐阅读