使用解析微软图形API和ArduinoJSON编码问题

问题描述 投票:0回答:1

我建立了我们公司的房间门标志,其连接到一个共享的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表示。

arduino microsoft-graph
1个回答
1
投票

根据JSON的规范,在UNICODE等字符转义是实现响应,因此,问题的来源使用的字符全覆盖不符合微软的图形API,但Arduino的JSON库本身是无法满足的问题JSON的规格。

作为一个解决方案,我现在用这个ArduinoJSON叉它确实工作完美https://github.com/trilader/ArduinoJson

© www.soinside.com 2019 - 2024. All rights reserved.