如何在Python 3中声明'空bytes
变量?
我正在尝试接收块的字节,然后将其更改为utf-8字符串。
但是,我不确定如何声明将保存整个字节序列的初始变量。此变量称为msg
。我无法将其声明为None
,因为您无法添加bytes
和NoneType
。我不能将它声明为unicode字符串,因为那时我将尝试将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))
答案 0 :(得分:44)
只需使用空字节字符串b''
。
但是,重复连接到字符串会涉及多次复制字符串。可变的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')
。
答案 1 :(得分:1)
使用msg = bytes('', encoding = 'your encoding here')
。
如果您想使用默认编码,只需使用msg = b''
,但如果它不在相同的编码中,这将会占用整个缓冲区
答案 2 :(得分:0)
根据文件:
块引用 socket.recv(bufsize [,flags]) 从套接字接收数据。返回值是字符串,表示收到的数据。 大段引用 所以,我认为msg =“”应该可以正常工作:
>>> msg = ""
>>> msg
''
>>> len(msg)
0
>>>