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))
Ответы
Ответ 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
>>>