36

如何bytes在 Python 3 中初始化(“声明”)一个空变量?

我正在尝试接收大块字节,然后将其更改为 utf-8 字符串。但是,我不确定如何初始化将保存整个字节系列的初始变量。这个变量被称为msg。我无法将其初始化为None,因为您无法添加 abytes和 a NoneType。我无法将其初始化为 unicode 字符串,因为那时我将尝试添加bytes到字符串中。此外,随着接收程序的发展,它可能会让我陷入一系列只包含部分字符的字节的混乱中。我不能没有msg初始化,因为 thenmsg会在分配之前被引用。以下是有问题的代码

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

4 回答 4

70

只需使用一个空字节字符串,b''.

但是,重复连接到字符串涉及多次复制字符串。可变的 Abytearray可能会更快:

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

要将字节数组解码为字符串,请使用msg.decode(encoding='utf-8').

于 2013-05-21T19:55:25.217 回答
2

使用msg = bytes('', encoding = 'your encoding here').

封装你想使用默认编码,只需使用msg = b'',但是如果它不是相同的编码,这将垃圾整个缓冲区

于 2015-05-21T09:00:04.007 回答
0

根据文档:

Blockquote socket.recv(bufsize[, flags]) 从套接字接收数据。返回值是一个字符串,表示接收到的数据。Blockquote 所以,我认为 msg="" 应该可以正常工作:

>>> msg = ""
>>> msg
''
>>> len(msg)
0
>>>
于 2013-05-21T20:16:49.800 回答
0

bytes()为我工作;

>>> bytes() == b''
True
于 2022-01-20T19:26:48.863 回答