TypeError: decoding str is not supported (converting bytes into str)

TypeError: decoding str is not supported (converting bytes into str)

我有这个代码

def run(self):
    while True:
        c, a = self.sock.accept()
        print(c)
        name = c.recv(1024)
        people = ""
        self.name_list.append(str(name, 'utf-8'))
        num_g = len(self.name_list)
        c.send(bytes(str(num_g), 'utf-8'))
        print((str(num_g)))

        data = str(c.recv(1024), 'utf-8')
        print(data)
        if str(data) == "ok":
            for name in self.name_list:
                print(name)
                c.send(bytes(name, 'utf-8'))
        print(len(self.name_list))
        print(strftime("%Y-%m-%d %H:%M:%S", gmtime())+" "+str(name, 'utf-8')+ " is connected")

我收到这个错误

    File "./server.py", line 51, in run
    print(strftime("%Y-%m-%d %H:%M:%S", gmtime())+" "+str(name, 'utf-8')+ " is connected")
TypeError: decoding str is not supported

我不明白为什么会出现此错误。当我从连接接收到字节时,

name = c.recv(1024)

名称以字节为单位,这就是为什么我在打印该行时尝试将其设为字符串的原因

您已经将该名称转换为 str

self.name_list.append(str(name, 'utf-8'))

将名称转换为字符串并将其保存为列表。

然后

for name in self.name_list:

遍历这些名称,在 for 循环结束时 name 的值是 self.name_list 中最终转换的名称。

所以当你

strftime("%Y-%m-%d %H:%M:%S", gmtime())+" "+str(name, 'utf-8')+ " is connected")

它使用的是 名称,而不是 name = c.recv(1024)

返回的原始名称

简单的解决方案是在处理 self.name_list.

for 循环中使用不同的变量名