Кодировка win-1251
- Войдите на сайт для отправки комментариев
Добрый день!
Сегодня с толкнулся со следующей проблемой.
Есть конечное оборудование, которое подключено к ардуино через serial.
Как оказалось, оборудование обменивается данными только в кодировке win-1251.
К примеру команду в виде - FE FE 5E E0 03 FD оборудвание понимает только в таком виде - юю^аэ
На указанную команду оборудвание должно дать ответ примерно следующего содержания - FE FE E0 5E 03 78 56 34 12 00 FD
Если сторонней терминальной программой отправлять комманду в кодировке win-1251 (юю^аэ) то от оборудвания приходит красивый ответ в вышеуказанном виде FE FE E0 5E 03 78 56 34 12 00 FD
Теперь пытаясь написать скетч, в котором ардуино должна каждую секунду отправлять комманду в виде юю^аэ и анализировать ответ оборудования, столкнулся с проблемой, что указанную комманду, ардуино кодирует по своему и соответственно она доходит до оборудвания в измененном виде и как следствие ответа нет ((((.
Прошу подсказать, как к примеру комманду юю^аэ отправить через ардуино на оборудвание в неизменном виде, т.е. в кодировке win-1251 и соответственно полученный ответ привести в читабельный вид - E FE E0 5E 03 78 56 34 12 00 FD.
Спасибо!
Нет такой команды.
Команда может быть FE FE E0 5E 03 78 56 34 12 00 FD, вот ее и отправляйте.
Arduino IDE использует кодировку utf-8.
Лично я советую Вам забыть об идее передавать команды символами кириллицы в текстовом виде. Пользуйтесь либо таблицей ASCII (коды с 0 по 7F), либо передавайте в двоичном виде. Но если очень хочется общаться текстом, нужно как следует разобраться с кодировками, что в случае с utf-8 не является тривиальным, т.к. 1251 - однобайтовая кодировкка, а utf-8 - кодировка с символами переменной длины.
Если отправляю команду через терминальную программу в виде FE FE E0 5E оборудование ее не воспринимает, воспринимает только комманду в виде кириллических символов...
В данном случае это не моя идея и не мое желание в такой кодировке отправлять данные, это грабли оборудования китайского.
Еще раз: никакой кодировке при отправке команд не используется. Команды - двоичные. То, что вся длинная команда оказалась состоящей из допустимых байтов 1251 станицы - чистая случайность. (может, и не случайность - разработчтки подстраховались для возможности использования стандартного терминала)
Но если Вы пишете скетч, Вам нужно забыть про кодировки и отправлять обычные числа. В языках С/С++ они записываются как 0xFE, 0xFE, 0xE0, 0x5E. И, собственно, это все, что Вам нужно.
это грабли оборудования китайского.