Ich benutze Python 2.7. Ich verstehe nicht, warum das nicht funktioniert, könnte mir bitte jemand einen Hinweis geben.Python-Fehler: Entpacken erfordert ein String-Argument der Länge 4, aber es ist?
>>> from struct import unpack
>>> T2 = u'\xb6'+u'\x01'+u'\x59'+u'\x59'
>>> T2
u'\xb6\x01YY'
>>> unpack('i', TS)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: unpack requires a string argument of length 4
Ich dachte, ich bin ein String-Argument von 4?
Der Grund, warum ich Unicode verwendet habe, ist, dass ich versuche, die Daten aus dieser URL zu extrahieren i gesendet ist zu werden:
path="/write/?type=stxetx&packet=AX%05YX%01%00%00%00%00%00%00%02%00%A0%00%05%00%C8%00%C0%0D%28%28%00%00%E85&localpackettime=2016-12-20+09%3A18%3A57&serial=868324023356343&packettime=2016-12-20+09%3A18%3A57&receivetime=2016-12-20+09%3A18%3A58&timezone=UTC"
Dies ist der Code Ich verwende die Paketdaten zu erhalten:
packet_data = request.GET.getlist('packet')
data_list = list(packet_data[0])
print "Data list ",data_list
das gibt mir eine Unicode-Liste wie folgt aus:
>> Data list [u'A', u'v', u'\x05', u'Y', u'X', u'\x01', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x02', u'\x00', u'\xa0', u'\x00', u'\x05', u'\x00', u'\xc8', u'\x00', u'\xc0', u'\r', u'(', u'(', u'\x00', u'\x00', u'\xe8', u'5']
data_list[1:5]
make up einen 4 Byte int Zeitstempel und der einzige Weg war, dass an einem Punkt zu arbeiten war, die Werte zu entpacken, aber es wirft diesen Fehler.
Sollte ich den Unicode vor dem Entpacken dekodieren/kodieren?
Warum haben Sie einen Unicode-String in erster Linie? Das ist kein Text, das sind binäre Daten, die du hast. –
Beachten Sie, dass python3 diese Fehlermeldung verdeutlicht: 'Ein Byte-ähnliches Objekt wird benötigt, nicht 'str''. –
Ich habe meine Frage richtig als neue Frage gestellt, da es jetzt verwirrend ist, danke für deine Hilfe - [link] (http://stackoverflow.com/questions/41246696/how-to-unpack-stxetx-data-in- Python) –