我正在为我们公司的房间建一个门牌,连接到一个共用的办公室365日历。
当我使用Ku00e4nel解析图形API的响应时,字符串“K nel”会产生“ArduinoJSON”,这既不支持UTF-8,也不支持UTF-16,但是"u00e4“是Unicode,所以这里发生了什么?
开发人员告诉我,解析的字符串不会被碰触,所以如果源在UTF-8中,输出就会正常工作,而对于输出显然不是这样。
我已经尝试过在标题中设置字符集,但也许我不知道更多的可用选项,这将帮助我摆脱我的问题。
代码:
String response = "";
DynamicJsonBuffer JSONBuffer;
http.begin(graphAPI);
http.addHeader("Authorization", "Bearer " + token);
http.addHeader("Prefer", "outlook.timezone = \"Central Europe Standard Time\"");
http.addHeader("Content-type", "application/json; charset=UTF-8");
int httpResponseCode = http.GET();
if (httpResponseCode = 200) {
response = http.getString();
JsonObject& parsed = JSONBuffer.parseObject(response);
if (parsed.success()) {
for (int i = 0; i < parsed["value"].size(); i++) {
String startTime = parsed["value"][i]["start"]["dateTime"];
startTime = startTime.substring(11, 16);
String endTime = parsed["value"][i]["end"]["dateTime"];
endTime = endTime.substring(11, 16);
String subject = parsed["value"][i]["subject"];
next_y += 35;
display_u8.setCursor(static_x, next_y);
display_u8.print(startTime + " - " + endTime + " " + subject);
}
} else {
display_u8.println("Parsing failed");
}抽样答复:
"value": [
{
"@odata.etag": "W/"Npd9zqlLQE+/S5XEMoC9AAAAIkfORw=="",
"id": ".............",
"subject": "von Känel Sacha ",
"start": {
"dateTime": "2019-02-11T13:00:00.0000000",
"timeZone": "Central Europe Standard Time"
},
"end": {
"dateTime": "2019-02-11T14:00:00.0000000",
"timeZone": "Central Europe Standard Time"
}
},
{
"@odata.etag": "W/"Npd9zqlLQE+/S5XEMoC9AAAAIkfOiQ=="",
"id": ".............",
"subject": "von Känel Sacha ",
"start": {
"dateTime": "2019-02-11T15:00:00.0000000",
"timeZone": "Central Europe Standard Time"
},
"end": {
"dateTime": "2019-02-11T16:00:00.0000000",
"timeZone": "Central Europe Standard Time"
}
}
],
}被解析的字符串应该显示为"von K nel Sacha“,而不是"von Ku00e4nel Sacha”。
编辑:我刚刚发现问题的根源是Microsoft本身,它将字符“”编码为\u00e4,但在我看来,这是错误的,我将字符集设置为UTF-8,这将不适用于这种Unicode表示形式。
发布于 2019-02-11 14:12:30
根据JSON规范,在UNICODE中转义这些字符是为了完全覆盖响应中使用的字符,因此问题的来源不是Microsofts的问题,而是Arduino JSON库本身无法满足JSON规范的问题。
作为一种解决方案,我现在使用了这个ArduinoJSON叉,它可以完美地工作https://github.com/trilader/ArduinoJson。
https://stackoverflow.com/questions/54630518
复制相似问题