2017-05-25 2 views
0

Je suis novice en Python et je travaille sur un capteur. Je construis mon code ligne par ligne et j'ai des problèmes avec la partie encodage/décodage pour les octets en chaîne. Même code, parfois ça marche, parfois ça ne marche pas.Codage erratique de l'octet à la chaîne sur Python 3 sous Ubuntu

Voici le 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) 

Il ne fonctionnait pas la première fois ronde, mais a travaillé sur la deuxième fois. Pourquoi?

Voici l'erreur que je reçois:

[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 

Comment puis-je supprimer l'ambiguïté de fonctionner avec succès?

Répondre

0

Cela est peut-être dû au fait que votre chaîne contenait un caractère non ascii. Lorsque vous avez réexécuté votre code, il n'y avait plus de caractère non ascii dans la chaîne et il a donc été exécuté avec succès.

Vous pouvez coder les caractères non ASCII en utilisant encode() fonction

+0

Je devrais encoder mon op ensemble avant de décoder? –