У меня проблема декодирования принятых байт с питоном 3. Я управлени Arduino через последовательное соединение и читать его с помощью следующего кода:Проблемы с декодированием байт в строку или ASCII в Python 3
import serial
arduino = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=20)
print(arduino.isOpen())
myData = arduino.readline()
print(myData)
Результат, который я получаю, выглядит как b'\xe1\x02\xc1\x032\x82\x83\x10\x83\xb2\x80\xb0\x92\x0b\xa0'
или b'\xe1\x02"\xe1\x00\x83\x92\x810\x82\xb2\x82\x91\xb2\n'
и пытался его декодировать обычным способом через myData.decode('utf-8')
, и я получаю ошибку UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 1: invalid start byte
. Я пробовал другие декодирования (ASCII, cp437, hex, utf-16), но всегда сталкивался с той же ошибкой.
Есть ли у вас какие-либо предложения, как я могу декодировать полученные байты или декодировать ардуино? Я уже пытался декодировать его по частям с помощью цикла for, но я всегда сталкиваюсь с тем же сообщением об ошибке.
И есть ли общий способ избежать проблем с декодированием или выяснить, какое декодирование я должен использовать?
Заранее спасибо.
Каковы данные отправки arduino? –
Вам нужно знать, что кодировка должна правильно декодировать. Посмотрите документацию о том, что отправляет данные, и надеемся, что они потрудились указать, какими должны быть эти байты. Затем декодируйте данные в блоке 'try'-' exccept' и напишите функцию обработки ошибок, чтобы справиться с неизбежными исключениями ... потому что рано или поздно вы получите мусорный ввод, независимо от того, что говорит спецификация. –
Почему вы думаете, что это должны быть текстовые данные? Как о кодировках, пожалуйста, прочитайте http://www.joelonsoftware.com/articles/Unicode.html, прежде чем называть любую другую строку кода, ради всего человечества. Но кодировки не похожи на вашу проблему здесь - это, вероятно, двоичные данные. – jsbueno