Дело вот в чем. При использовании inlineMenu, если в String menu указать русские символы, то в data они придут сломанным юникодом (не \u044f например, а \\u044f). поэтому они не преобразуются в символ, а остаются string(ом).
Пример:
if (msg.data != "")Serial.println(msg.data);bot.inlineMenu("Меню 1", "абв", msg.chatID);
В таком случае в msg.data окажется "\\u0430\\u0431\\u0432", хотя должно было "\u0430\u0431\u0432", что преобразуется в "абв".
Можно конечно использовать inlineMenuCallback, и в data будет возвращаться английский cback(если конечно мы его сделаем английским), но хотелось бы поддержку русских символов для data.
Лично я это сделал "костылем":
String rus[] = {"0430", "\u0430", "0431", "\u0431", ... , "042e", "\u042e", "042f", "\u042f"};String rusFind(String str) {String strNew ;for (int i = 0; i < str.length(); i++)if (str[i] == '\\'){String num;for (int j = 2; j < 6; j++)num += str[i + j];int k = 0;while (rus[k] != num && k < 132) {k += 2;}strNew += rus[k + 1];i += 5;}else {strNew += str[i];}return strNew;}void newMsg (FB_msg& msg) {msg.data = rusFind(msg.data);...}
Дело вот в чем. При использовании inlineMenu, если в String menu указать русские символы, то в data они придут сломанным юникодом (не \u044f например, а \\u044f). поэтому они не преобразуются в символ, а остаются string(ом). Пример:
if (msg.data != "")
Serial.println(msg.data);
bot.inlineMenu("Меню 1", "абв", msg.chatID);
В таком случае в msg.data окажется "\\u0430\\u0431\\u0432", хотя должно было "\u0430\u0431\u0432", что преобразуется в "абв". Можно конечно использовать inlineMenuCallback, и в data будет возвращаться английский cback(если конечно мы его сделаем английским), но хотелось бы поддержку русских символов для data. Лично я это сделал "костылем":String rus[] = {"0430", "\u0430", "0431", "\u0431", ... , "042e", "\u042e", "042f", "\u042f"};
String rusFind(String str) {
String strNew ;
for (int i = 0; i < str.length(); i++)
if (str[i] == '\\'){
String num;
for (int j = 2; j < 6; j++)
num += str[i + j];
int k = 0;
while (rus[k] != num && k < 132) {
k += 2;
}
strNew += rus[k + 1];
i += 5;
}
else {
strNew += str[i];
}
return strNew;
}
void newMsg (FB_msg& msg) {
msg.data = rusFind(msg.data);
...
}