c++ - 为什么我会收到无效的 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 的更多信息
解决方案
推荐阅读
- android - 颤振应用程序发布显示错误任务':app:validateSigningRelease'执行失败
- c# - 如何检查某个 uint 是否应用了 0x01000000 掩码?
- react-native - Expo无法连接到android-studio模拟器(Ubuntu 20.04)
- c# - 如何在 c# winform 应用程序中使用来自另一个类的字符串?
- android - 有什么方法可以在不征得许可的情况下存储文本文件?
- twitter-bootstrap - bootstrap 4 的日期格式已更改
- azure-functions - 如何从 Azure Functions 方法而不是属性中查询 CosmosDB
- react-native - 删除 createMaterialTopTabNavigator 上的标题
- python - 如何正确注释可选类属性?
- python - 使用 Python Pandas 计算行列式的问题