Я строю дверной знак для комнат нашей компании, который подключается к общему календарю Office 365.
Строка «Känel» приводит к «Ku00e4nel», когда я анализирую ответ API Graph, используя 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 Graph API, который кодирует символ "ä" как \ u00e4, но, на мой взгляд, это неправильно, учитывая, что я установилкодировка UTF-8, которая не будет работать с этим представлением Unicode.