web-dev-qa-db-fra.com

Python 3 Comment «déclarer» une variable vide «octets»

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))
22
tsteemers

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').

47
Mechanical snail

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

1
Dr. Sahib

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
>>>
0
PSS