我建立了我们公司的房间门标志,其连接到一个共享的Office 365日历。
字符串“Känel”结果“Ku00e4nel”当我解析使用ArduinoJSON图形API不支持使用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"
}
}
],
}
解析后的字符串应显示为“冯Känel萨沙”而不是“冯Ku00e4nel萨沙”。
编辑:我刚刚发现了问题的根源是微软图形API本身编码字符“A”为\ u00e4但这是错误的,我认为牢记我的字符集设置为UTF-8,这将不会与工作Unicode表示。
根据JSON的规范,在UNICODE等字符转义是实现响应,因此,问题的来源使用的字符全覆盖不符合微软的图形API,但Arduino的JSON库本身是无法满足的问题JSON的规格。
作为一个解决方案,我现在用这个ArduinoJSON叉它确实工作完美https://github.com/trilader/ArduinoJson