2016-05-25 18 views
-1

Ich habe versucht, ein Bild zu veröffentlichen und unter Verwendung von Moskito in R-pi.Wie kann ich beheben "UnicodeDecodeError: 'Ascii' Code kann Byte Oxff in Psition nicht decodieren" Fehler

Dies ist pub.py

import paho.mqtt.client as mqtt 

    def on_publish(mosq, userdata, mid): 
    mosq.disconnect() 

    client = mqtt.Client() 

    client.connect("test.mosquitto.org", 1883, 60) #error? 

    f = open("1.jpg", "rb") 
    fileContent = f.read() 
    byteArr = bytes(fileContent) 
    client.publish("image", byteArr, 0) 

    client.loop(5) 

Allerdings gibt es ein Fehler, die "UnicodeDecodeError: 'ascii' Code nicht Byte OxFF in psition dekodieren kann", wenn ich es laufen.

habe ich dachte, dieser Fehler durch „test.mosquitto.org“ Linie 8.

So verursacht wird, ich versuchte es andere Wege zu ändern, aber es hat nicht funktioniert.

Die am meisten verdrahtete Sache ist, dass es funktionierte, als ich versucht habe, eine Textdatei zu öffnen und einige Char und Pub/Sub wie diese Quelle zu extrahieren.

#It does work 
    import paho.mqtt.client as mqtt 

    def on_public(mosq, userdata, mid): 
     mosq.disconnect() 

    client = mqtt.Client() 

    client.connect("test.mosquitto.org", 1883, 60) 

    f=open("text.txt") 
    con=f.read(3) 
    client.publish("image",con) 

    client.loop(5) 

Ich kann keinen Unterschied finden und lösen.

+0

Welche Version von Python verwenden Sie? Könnten Sie der Frage auch einen Stack-Trace hinzufügen? –

+0

@ahnstar Siehe unten Antwort, es wird sicherlich Ihr Problem lösen –

+0

Ich benutze Python 2.7.9 – ahnstar

Antwort

1

Es sieht so aus, als ob Sie Python 2.7 ausführen.

Versuchen ersetzt

byteArr = bytes(fileContent) 

mit

byteArr = bytearray(fileContent) 

Erstere sieht immer noch wie eine Zeichenfolge, die dann durch upayload = payload.encode('utf-8') durch die Bibliothek übergeben wird. Wenn du binäre Daten hast, die nicht funktionieren.


Andere Dinge, die Sie sollten, sind tun client.loop(5) mit client.loop_forever() zu ersetzen, sonst wird die Datei möglicherweise nicht gesendet bekommen.

Sie weisen Ihre Rückruffunktion auch nicht zu.