2016-03-17 51 views
1

我與Python上樹莓PI編碼意外結束2.「UTF-8」編解碼器不能在位置6解碼字節0xc4:數據

我試圖通過發送幾個數量級到兩個設備藍牙在同一時間,但它不工作。

根據錯誤消息,當我向第二個設備發送訂單時,我無法解碼響應。我已經嘗試過用「UTF-8」編碼,但它也不能工作......

以下是錯誤消息:

Traceback (most recent call last): 
    File "/home/pi/Desktop/Bluetooth-master/Bluetooth-master/rfcommcli.py", line 60, in <module> 
    StartBTClient() 
    File "/home/pi/Desktop/Bluetooth-master/Bluetooth-master/rfcommcli.py", line 54, in StartBTClient 
    print('reception 2 : ', rec2.decode()) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 6: unexpected end of data 

所以你能幫助我,請。

下面是代碼:

import bluetooth 


class BT(object): 

    address_2 = ('00:04:3E:93:39:A9') 
    address_1 = ('00:04:3E:6A:10:A9') 

    def __init__(self): 
     self.btSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 

    def __exit__(self): 
     self.Disconnect() 

    def Connect(self, mac, port=1): 
     self.btSocket.connect((mac, port)) 
     print('Connecter') 

    def Disconnect(self): 
     try: 
      self.btSocket.close() 
     except Exception: 
      pass 

    def Send(self, data): 
     self.btSocket.send(data.encode()) 

    def Receive(self, size=1024): 
     return self.btSocket.recv(size) 


def StartBTClient(): 
    cli = BT() 
    print('BT1 Connexion en cours ...') 
    #cli.Discover() 
    cli.Connect(cli.address_1, 0o01) 

    cli2 = BT() 
    print('BT2 Connexion en cours ...') 
    #cli.Discover() 
    cli2.Connect(cli2.address_2, 0o02) 
    print('Donner un ordre ... (ordre shutter)') 

    while True: 
     data = input() 
     if (data == 'exit'): 
      break 
     cli.Send("read\r") 
     cli2.Send("read\r") 
     rec = cli.Receive() 
     rec2 = cli2.Receive() 
     print('reception 1 : ', rec.decode()) 
     print('reception 2 : ', rec2.decode()) 

    cli.Disconnect() 
    cli2.Disconnect() 

if __name__ == '__main__': 
    StartBTClient() 

回答

0

顯然設備#2與一些響應,但不是全部的UTF-8編碼的值的字節。

在嘗試解碼消息之前,您需要確保已收到並彙編消息的所有字節。這可能涉及多次呼叫.recv()

+0

按照你的想法,我試過這個:self.btSocket.recv(size, socket.MSG_WAITALL)但它不起作用。 (同樣的錯誤信息) – Zefael

相關問題