GyverLibs / FastBot

Многофункциональная быстрая библиотека для Телеграм бота на esp8266/esp32
MIT License
185 stars 31 forks source link

inlineMenu (data) #27

Closed Tlinmo closed 1 year ago

Tlinmo commented 1 year ago

Дело вот в чем. При использовании 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); ... }

GyverLibs commented 1 year ago

Посмотрю. Но работать в коде с русскими строками - такое, лучше использовать коллбэк всё таки