Обработка русского текста в скетче

Тема в разделе "Arduino & Shields", создана пользователем OlegROA, 4 фев 2019.

  1. OlegROA

    OlegROA Нерд

    Добрый день.

    Как известно, ардуиновский IDE создает скетч в кодировке UTF8.
    Соответственно, строковые константы с русским текстом тоже кодируются в UTF8, что делает невозможным применение к таким строкам функций поиска символов, вырезки части строки и пр.
    Т.е., метод String.substring(), к примеру, работает не с символами, а с байтами. А русские символы в UTF8 кодируются 2 байтами каждый.
    Таким образом substring(0,2) вернет не два русских символа только один. А если первый символ не русский а второй русский, то вернет вообще полтора символа!

    Может кто подсказать вариант обработки текстов с русскими символами?
    Как вариант - код перекодирования utf8 в windows1251 - после этого можно уже будет использовать стандартные функции обработки строк.

    Спасибо!
     
  2. DetSimen

    DetSimen Гуру

    напиши библиотеку WideString. И сё.
     
  3. А что вас останавливает? Перед сборкой (налету) пререкодируйте исходники в win1251 и собирайте.
     
  4. OlegROA

    OlegROA Нерд

    Не подходит - текст может быть разным. Кроме этого, текст в utf8 может быть получен извне.

    Что касается совета "напиши сам" - возможно уже есть готовая библиотека?
    Не думаю, что подобная проблема возникла только у меня?
     
  5. parovoZZ

    parovoZZ Гуру

    Скорее всего. Поиск на гитхабе и прочих библопомойках даст точный ответ.
     
  6. Из первого поста, насколько я понял, используете ардуино-иде для редактирования исходников, последующей "Проверки" и "Загрузки". ИМХО не самый лучший редактор, но это ваш выбор. Определенные сложности испытываете связанные с кодировкой.
    Я бы рекомендовал для простого решения просто сменить редактор, но для вас важно использовать именно ардуино-иде для редактирования кода.
    В первом посте ничего не говорилось об
    Кроме этого ничего на сказали об модулях на которых предполагаете конвертировать.
    Например для arduino core esp8266/esp32 в sdk есть библиотека iconv.
     
  7. DetSimen

    DetSimen Гуру

    можно взять готовую String, и творчески (вдумчиво) заменить все char на wchar_t, и паматреть что будет.
     
  8. OlegROA

    OlegROA Нерд

    Использование Arduino IDE обусловлено тем, что изначально в школе установили на все компы компьютерных классов именно ее. Она полностью устраивает и проблема возникла только из-за одного проекта - бегущая строка на дисплее 1602. С отображением самого русского текста проблем нет, проблема именно в прокрутке.
    Поэтому и возникла идея перекодировать из utf8 в windows-1251.
    Код для этой перекодировки уже написал - большую его часть взял из LiquidCrystalRus.
    Еще бы код для обратной перекодировки из 1251 в utf8 - при отладке через монитор порта нужна именно utf8.
    По поводу замены char на wchar_t - в строке могут быть не только русские символы и простая замена не прокатит. Т.е., в строке utf8 одновременно присутствуют как ascii символы, занимающие один байт, так и русские символы, представленные двумя байтами.
     
  9. DetSimen

    DetSimen Гуру

    Паржалъ
     
  10. parovoZZ

    parovoZZ Гуру

    а в профиле 55 лет. Это такой немой вопрос.
     
  11. Я плакаль.
    По существу. Вот тут автор делал простой кодировщик для соответствующих фонтов для адафрута gfx.

    Оффтоп.
    А в школах в школе нынче ОС какая на компах установлена?
     
  12. parovoZZ

    parovoZZ Гуру

    У школьников линакс. У директора выньдавс.
     
  13. Nikita228

    Nikita228 Гик

    У нас в кабинетах информатики везде винда 10 стоит
     
  14. OlegROA

    OlegROA Нерд

    Можно узнать - над чем, конкретно? Может и сам повеселюсь?
    В чем сам вопрос? Слишком стар/молод для учителя? Почему не меняю? Уже писал - стандартная оболочка полностью устраивает для написания скетчей по робототехнике. Самому программированию учим на питоне и паскале.
    Плакать не хочу, но тоже интересно - над чем, конкретно, плакали?
    Над тем, что не взял упомянутый Вами код, а воспользовался другим источником?
    В большинстве московских школ стоит Винда. С лицензиями на все версии проблем для школ нет.
    Конкретно у нас - семерки и 10-ки. Больше 200 компов - без проблем.

    Что до поднятою мной темы - не думал, что для ардуинки так до сих пор и не написали полноценной либы для перекодировки между различными кодировками. Хотя бы для старших версий МК, в которых достаточно памяти.
     
  15. parovoZZ

    parovoZZ Гуру

    вот и ответ
    Всё нормально))

    Но вопросы - абдурина навязана сверху? Ученики с таким багажом знаний в индустрии не нужны. Как не нужны в бухгалтерии те, кто освоил счеты. Лучше все ж начинать с основ. На собеседовании первый же вопрос будет про периферию. И не какого-то чухонского AVR (ну кому он сейчас нужен))?), а процев с ARM ядром.
    Второе - зачем преподавать то, в чем поверхностные знания? Поэтому возгласы, например:
    вполне объяснимы.
     
  16. OlegROA

    OlegROA Нерд

    Мы - не профильная школа. И классы робототехники не для выпуска специалистов по робототехнике или МК а, в основном, для общего развития с техническим уклоном.
    Да и сама робототехника заключается в создании простейших "робоняш" и прочих самодвижущихся платформ без влезания в недра МК - 5-6 классы для этого слишком рано. Да и спонсоры на более серьезное железо финансирование не дают.
    Да, по схемотехнике МК у меня, действительно, поверхностные знания - я инженер по компоновке и конструкции космических ЛА, сисадмин и программист.
     
    vvr, Un_ka и ZAZ-965 нравится это.
  17. Дело не в лицензиях, а в отсутствии альтернатив.
    Когда детей учат ин. языку, хоть какой то выбор есть, английский немецкий французский испанский, а когда дают информатику, то уж без вариантов.
    Тут как раз и парадокс налицо. Программирование нативное, так уж исторически сложилось, в основном построено на гну-тых пакетах, тянуть гну-тые компайлеры мейкеры на виндовс очень спорное решение, кроме этого если речь идет об освоении процев с АРМ ядром то область применения для этих процов для ОС виндовс весьма ограничена, скорее встретишь на АРМ-е встроенные устройства на ОС семейства *nix.
     
  18. Вот из за поверхностного общего развития зачастую приходится сталкиваться с кодом, который вроде и кросс платформенный, только собирается исключительно на ОС виндовс, потому что автор привык что ОС не чувствительна к регистру в именах файлов и много чего прощает, напишет #include <arduino.h> (не Arduino.h) а файла такого нет, ОС простит это автору, а другие разработчики вспомнят тут же учителей.
     
  19. OlegROA

    OlegROA Нерд

    Какой учитель.
    При прохождении темы "Файловые системы" обязательно упоминаются различия как самих ФС, так и особенности ОС.
    А при обучении основ программирования обязательное требование - как переменную объявил (регистр букв), так везде в коде и используй.
    По поводу альтернативы с ОС - большинство учеников в дальнейшем будет работать исключительно с офисным ПО. И здесь - если знаешь основы любого текстового/графического/табличного редактора, то сможешь работать что на офисе от MS, что на опенофисе.
    И с настройками ОС на уровне домашнего пользователя аналогично - никто из таких пользователей не полезет в конфигурационные файлы *никсовых ОС, а умея работать с оконным интерфейсом он сможет найти нужные настройки в любой ОС.
     
  20. AlexU

    AlexU Гуру

    Так и решайте эту проблему (проблему прокуртки) и не создавайте себе новых. Если не знаете как решить, то можем помочь.