2017-05-25 1 views
0

Ich bin neu in Python und arbeite an einem Sensor. Ich baue meinen Code Zeile für Zeile und ich habe Probleme mit der Codierung/Decodierung Teil für Bytes zu string. Gleicher Code, irgendwann funktioniert es, irgendwann geht es nicht. HierErratische Codierung von Byte zu String auf Python 3 unter Ubuntu

ist der Code:

import serial 
import time 
import os 

port = serial.Serial("/dev/ttyUSB0", baudrate=9600, timeout=1,  bytesize=8) 
f_w = open('/home/myname/python_serial_output.txt','r+') 

port.send_break() 

while True: 
    op = port.read(2) 
    op_str = op.decode('utf-8') 
    f_w.write(op_str) 
    print(op_str) 

Es dauerte nicht beim ersten Mal arbeiten, aber auf das zweite Mal gearbeitet. Warum?

Hier wird der Fehler erhalte ich:

[email protected]:~$ python3 serial_test.py 
Traceback (most recent call last): 
    File "serial_test.py", line 13, in <module> 
    op_str = op.decode('utf-8') 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 0: invalid start byte 

[email protected]:~$ python3 serial_test.py 
Ex 
pl 
or 
er 

Wie entferne ich die Mehrdeutigkeit davon läuft erfolgreich?

Antwort

0

Dies kann passieren, weil Ihre Zeichenfolge ein nicht ASCII-Zeichen hatte. Wenn Sie den Code erneut ausgeführt haben, gab es kein nicht-ASCII-Zeichen in der Zeichenfolge und daher wurde es erfolgreich ausgeführt.

Sie können die nicht ASCII-Zeichen codieren, indem Sie kodieren() Funktion

+0

Also sollte ich vor der Decodierung es mein ganzes op kodieren? –