Подтвердить что ты не робот

Python 3 Как "объявить" пустую переменную `bytes`

Как мне объявить 'пустую переменную bytes в Python 3?

Я пытаюсь получить куски байтов, а затем меняю это на строку utf-8. Однако я не уверен, как объявить начальную переменную, которая будет содержать всю строку байтов. Эта переменная называется msg. Я не могу объявить его как None, потому что вы не можете добавить bytes и NoneType. Я не могу объявить его как строку юникода, потому что тогда я попытаюсь добавить bytes в строку. Кроме того, по мере развития программы приема она может привести меня к беспорядку с чередой байтов, которые содержат только части символов. Я не могу обойтись без объявления msg, потому что тогда перед назначением будет ссылка msg. Ниже приведен код, о котором идет речь

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))
4b9b3361

Ответ 1

Просто используйте пустую строку байта, b''.

Однако конкатенация строки неоднократно требует многократного копирования строки. A bytearray, который изменен, скорее всего будет быстрее:

msg = bytearray()  # New empty byte array
# Append data to the array
msg.extend(b"blah")
msg.extend(b"foo") 

Чтобы декодировать массив байтов в строку, используйте msg.decode(encoding='utf-8').

Ответ 2

Используйте msg = bytes('', encoding = 'your encoding here').

Если вы хотите пойти с кодировкой по умолчанию, просто используйте msg = b'', но это будет мусором весь буфер, если его не в той же кодировке

Ответ 3

Согласно документации:

Blockquote socket.recv(bufsize [, flags]) Получать данные из сокета. Возвращаемое значение представляет собой строку , представляющую полученные данные. Blockquote Итак, я думаю, msg = "" должен работать нормально:

>>> msg = ""
>>> msg
''
>>> len(msg)
0
>>>