Ich stehe vor einem seltsamen Problem. Ich kann die über eine Socket-Verbindung empfangenen Daten nicht dekodieren, während sie mit dem gleichen Code in Python 2.7 arbeiten. Ich weiß, dass der in Python 2 empfangene Datentyp ein String und ein Byte in Python 3 ist. Aber ich verstehe nicht, warum ich einen Fehler erhalte, wenn ich versuche zu dekodieren. Ich sende genau die gleichen Daten (Copy/Paste, um sicher zu sein), außer dass ich .encode() für Python 3 ausführen muss, um zu vermeiden, "TypeError, ein Byte-ähnliches Objekt wird benötigt, nicht 'str'"Python3-Socket kann Inhalt nicht decodieren
Python2:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(15)
s.connect((SERVERIP, SERVERPORT))
s.send(message)
data = ''
while True:
new_data = s.recv(4096)
if not new_data:
break
data += new_data
s.close()
Python 3
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(15)
s.connect((SERVERIP, SERVERPORT))
s.send(message)
data = ''
while True:
new_data = s.recv(4096)
if not new_data:
break
data += new_data.decode('utf-8') #same result with new_data.decode()
s.close()
Python 2 new_data Inhalt:
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x04\x00\x05\xc1\xdd\[email protected]\x18\x00\xd0\x07r\xa3\xb6\xfdv]t\xa1T&\xb5d\x91\xd1tA\x98]F\xfeB\x1a\x0f\xdf9yu\x10s\xa3\xa29:\xdbl\xae\xe9\xe8\xd9H\xc8v\xa8\xd0K\x8c\xde\xd7\xef\xf9\xc4uf\xca\xfd \xdd\xb7\x0c\x9a\x84\xe9\xec\xb7\xf1\xf3\x97o\\k\xd5E\xc3\r\x11(\x9d{\xf7!\xdc*\x8c\xd5\x1c\x0b\xadG\xa5\x1e(\x97dO\x9b\x8f\x14\xaa\xddf\xd7I\x1e\xbb\xd4\xe7a\xe4\xe6a\x88\x8b\xf5\xa0\x08\xab\x11\xda\xea\xb8S\xf0\x98\x94\x1c\x9d\xa24>9\xbai\xd3\x1f\xe6\xcc`^\x91\xca\x02j\x1aLy\xccj\x0fdVn\[email protected]\xb0\[email protected]\x80hX#\xb0\x06\n\x0b\xc0\xf2x\xfe\x01?\x05\x1f\xc1\xc5\x00\x00\x00'
Python3 new_data Inhalt:
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x04\x00\x05\xc1\xdb\[email protected]\x00\x00\xd0\x0f\xf2\xc0\xda\xb5\xcbC\x0f"-\xb9gPM\x0f\x85&\x8b)\xb7\x1d\x1a\x1f\xdf9\xe3\xbc\xbe\xfd\x9e\xd9A\xe3:\x851,\xcf\xc4\xe5\x865|\xa5\xcb\xbb\xcbs\xa8\x8f\xcc\x1b\xf7\x06\xc5\x8f\xfa\xba\x84\xd8>\xea\xc0\xa5b\xe6\xceC\xea\xd0\x88\xebM\t\xd7\xf8\xc1*#hI\xd6F\x80\xb3B[\xa7\x99\x91\xbe\x16%Q\xf5\x1d(\xa0\x93\x87\n\x13\xbe\x92\x91\xcc\xbfT\x98b\xd3\x0b=\xc0\xd5\xb3\xdf}\xcc\xc9\xb1\xe4\'\xb1\xe25\xcc{tl\xe5\x92\xf34x\xd5\xa1\xf9K\xa4\xa8k\xa8 dU\xd7\x1e\xce\xb4\x02\xean\xc3\x10#\x05\x13L\x14\xa0(H\xd2d\xb8a\xbc\xdd\xee\x7f\x1b\xe5\xf1\xd2\xc5\x00\x00\x00'
Und wenn so in python3 Ich erhalte diese Störung, wenn ich zu entschlüsseln versuchen:
'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
Die empfangenen Daten sind nicht das gleiche. Die Differenz beginnt nach 'x12B @'. Jemand hat eine Erklärung?
Ich verwalte die Serverseite nicht, also frag mich nicht, diese Seite zu überprüfen!
Danke,
Matthieu
Ihre Daten sind nicht utf-8, so würde dieser Fehler auf Python erhalten 2 auch, wenn Sie versucht haben, es von utf-8 zu entschlüsseln. Warum versuchst du es überhaupt zu entschlüsseln, wenn es so aussieht, als wäre es Binärdaten, nicht Text? – Duncan