Arduino IDE и UTF-8

Тема в разделе "Arduino & Shields", создана пользователем ostrov, 21 сен 2016.

  1. ostrov

    ostrov Гуру

    Подскажите кто нибудь, я уже не понимаю куда копать. Как известно, русские буквы в IDE кодируется в двухбайтовый UTF-8. Слово "привет", например выдает ся в консоли как: РїСЂРёРІРµС. И хорошо бы, с ним разобрался, переводить программу научил.

    Но пойму с какого хрена он иногда ВНЕЗАПНО переключается на CP-1251. И в консоль так и летит:
    [​IMG]
    Мне в этом вопросе нужна стабильность и предсказуемость, либо так либо этак, но наверняка. В интернете ответа с ходу не нашел. Как задавать кодировку принудительно не понятно. Что я упускаю?
     
  2. AlexU

    AlexU Гуру

    Что значит ВНЕЗАПНО? Одна и та же программа, собранная из одних и тех же исходников (с одной и той же кодировкой), одним и тем же компилятором (хотя компилятор скорее не при чём), запускаемая в одном и том же терминале (консоли) иногда выводит корректные символы, а иногда кракозябры. Так?
    Хотя скорее всего не так. В чём то есть отличия. Поэтому, если есть желание получить помощь, прошу сообщить подробнее: что и как собирается, где и в каком окружении запускается.
     
  3. ostrov

    ostrov Гуру

    Самое смешное, что именно так. Два раза компилируется так, а третий не так.
     
  4. ostrov

    ostrov Гуру

    Единственное что заметил, чаще компилит не в UTF-8, когда фай не не *.ino. Например, *.pde, но не всегда.
     
  5. AlexU

    AlexU Гуру

    Arduino IDE по-умолчанию использует UTF-8 как в Windows, так и в Linux. Но если исходники изначально были в другой кодировке, то среда оставит эту кодировку без изменений. Для исправления кодировки на UTF-8 в среде есть команда "Инструменты -> Исправить Кодировку и Перегрузить", которая по идее должна переводить кодировку в UTF-8. В принципе она это делает, но очень глючно и с неожиданными результатами (похоже, что умеет преобразовывать только из CP-1251). Пользоваться этой командой не советую.
    Скорее всего проблемы с кодировкой как раз связаны с тем, что исходники (*.ino, *.pde) в момент компиляции были в кодировке отличной от UTF-8. В среде Arduino IDE (v.1.6.11) это должно быть заметно -- символы не английского алфавита отображаются квадратами.
     
  6. ostrov

    ostrov Гуру

    Я открывал *.pde в Note+ и видел что кодировка UTF-8 без BON, но заметил, что если тоже самое скопировать в *.ino то выводит верно. Без малейших изенений в тексте.
     
  7. AlexU

    AlexU Гуру

    Редакторы могут ошибаться, достоверно определить кодировку можно только в каком-нибудь HEX-редакторе.
    Это потому что Arduino IDE использует кодировку Unicode в редакторе .(т.к. основана на Java, а в ней все строки представлены в этой кодировке) для нового текста (набираемого или копируемого). И при сохранени преобразует в кодировку UTF-8. В этом, скорее всего, и кроется внезапность смены кодировки.
     
  8. UdAvSt

    UdAvSt Нуб

    Прошло много времени, но вот меня эта ошибка тоже периодически задалбывает. У меня всё наоборот. Обычно выгружается в CP1251 (у меня соотвественно и WEB-страничка на esp, и MQTT отображается в 1251, всё работает), но иногда компилируется в UTF8, и в браузере дребедень и в MQTT. Причём у меня именно всё это на одном и том же файле, на одной и той же среде(вернее версии были разные, по мере выхода - поведение одно, сейчас arduino 1.8.5). Никаких изменений, просто подредактирую код, он в CP1251, в другой раз, пару строк по середине поправишь, станет UTF8, потом опять наоборот, чаще, как надо мне - 1251. Но хотелось бы стабильности, а я бы уж под неё подстроился.
     
  9. b707

    b707 Гуру

    Стабильность - не пользоваться кириллицей в программах вообще.
     
  10. Gomez

    Gomez Гик

    У меня тоже 1.8.5. Меня эта "беда" задалбывает, когда выводишь на oled-дисплей что-то русскоязычное.
    По умолчанию (когда перешел на 1.8.5) теперь так всегда - если ты открыл проект и снова записал его, кодировка слетит. Но действительно, стоит открыть этот файл в каком-либо редакторе, с UTF8 поменять на что-то и потом снова на UTF8 и записать, то этот проект загрузится в Ардуино с нормальной кодировкой.
    Да, конечно, на время отладки можно заменить русские надписи английскими, а потом уж воспользоваться вышеуказанным "танцем с бубном", но как-то все это неправильно и хочется устроить скандал. ;)
     
  11. UdAvSt

    UdAvSt Нуб

    Ну вот я тоже так делаю, открываю в FARе, меняю кодировку туда-обратно, сохраняю, потом из ардуины выгружается нормально.
    В ардуине как раз кириллица всегда отображается нормально, не вижу смысла не пользоваться, комменты опять же легче писать и читать на родном языке, проблема в том, как кириллица выгружается в железяку, а в железяке предпочтительна одинаковая кодяровка, на которую настроен экран, на который приятно русские надписи выводить, так же WEBка, на которую заходят русскоязычные люди.

    С одной стороны виноват компилятор, ведь на этом этапе происходит изменение кодировки, но с другой иде, т.к. при буда начинается с открытия файла, не смотря на то, что в иде всё отлично отображается.