首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Microsoft和ArduinoJSON进行解析的编码问题

使用Microsoft和ArduinoJSON进行解析的编码问题
EN

Stack Overflow用户
提问于 2019-02-11 12:20:57
回答 1查看 1.5K关注 0票数 0

我正在为我们公司的房间建一个门牌,连接到一个共用的办公室365日历。

当我使用Ku00e4nel解析图形API的响应时,字符串“K nel”会产生“ArduinoJSON”,这既不支持UTF-8,也不支持UTF-16,但是"u00e4“是Unicode,所以这里发生了什么?

开发人员告诉我,解析的字符串不会被碰触,所以如果源在UTF-8中,输出就会正常工作,而对于输出显然不是这样。

我已经尝试过在标题中设置字符集,但也许我不知道更多的可用选项,这将帮助我摆脱我的问题。

代码:

代码语言:javascript
复制
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");
    }

抽样答复:

代码语言:javascript
复制
"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表示形式。

EN

回答 1

Stack Overflow用户

发布于 2019-02-11 14:12:30

根据JSON规范,在UNICODE中转义这些字符是为了完全覆盖响应中使用的字符,因此问题的来源不是Microsofts的问题,而是Arduino JSON库本身无法满足JSON规范的问题。

作为一种解决方案,我现在使用了这个ArduinoJSON叉,它可以完美地工作https://github.com/trilader/ArduinoJson

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54630518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档