我在與蟒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),但總是面臨同樣的錯誤。
你有什麼建議,我如何解碼接收到的字節或解碼arduino需要的?我已經嘗試使用for循環逐段解碼它,但我總是面臨同樣的錯誤信息。
有沒有一種通用的方法來避免解碼問題或找出哪些解碼我必須使用?
在此先感謝。
arduino發送什麼樣的數據? –
你需要知道什麼編碼是正確解碼它。查看發送數據的文檔,並希望他們能夠指定這些字節應該是什麼。然後,在'try'-'except'塊中解碼數據,並編寫一個錯誤處理函數來處理不可避免的異常......因爲不管規範說什麼,遲早都會得到垃圾輸入。 –
你爲什麼認爲這應該是文本數據呢?至於編碼方面,請在閱讀其他代碼行前閱讀http://www.joelonsoftware.com/articles/Unicode.html,這是爲了人類的緣故。但編碼在這裏看起來不像你的問題 - 這可能是二進制數據。 – jsbueno