Comment "déclarer" une variable bytes
vide dans Python 3?
J'essaie de recevoir des morceaux d'octets, et plus tard de changer cela en une chaîne utf-8. Cependant, je ne sais pas comment déclarer la variable initiale qui contiendra toute la série d'octets. Cette variable est appelée msg
. Je ne peux pas le déclarer comme None
, car vous ne pouvez pas ajouter un bytes
et un NoneType
. Je ne peux pas le déclarer comme une chaîne unicode, car alors j'essaierai d'ajouter bytes
à une chaîne. De plus, à mesure que le programme de réception évolue, cela pourrait me mettre dans un désordre avec une série d'octets qui ne contiennent que des parties de caractères. Je ne peux pas me passer d'une déclaration msg
, car alors msg
serait référencé avant l'affectation. Voici le code en question
def handleClient(conn, addr):
print('Connection from:', addr)
msg = ?
while 1:
chunk = conn.recv(1024)
if not chunk:
break
msg = msg + chunk
msg = str(msg, 'UTF-8')
conn.close()
print('Received:', unpack(msg))
Utilisez simplement une chaîne d'octets vide, b''
.
Toutefois, la concaténation répétée d'une chaîne implique de copier la chaîne plusieurs fois. Un bytearray
, qui est modifiable, sera probablement plus rapide:
msg = bytearray() # New empty byte array
# Append data to the array
msg.extend(b"blah")
msg.extend(b"foo")
Pour décoder le tableau d'octets en une chaîne, utilisez msg.decode(encoding='utf-8')
.
Utilisez msg = bytes('', encoding = 'your encoding here')
.
Si vous voulez utiliser l'encodage par défaut, utilisez simplement msg = b''
, mais cela endommagera tout le tampon s'il n'est pas dans le même encodage
Selon la documentation:
Blockquote socket.recv (bufsize [ flags]) Recevez les données du socket. La valeur de retour est un chaîne représentant les données reçues. Blockquote Donc, je pense que msg = "" devrait très bien fonctionner:
>>> msg = ""
>>> msg
''
>>> len(msg)
0
>>>