TypeError:不支持解码str(将字节转换为str)

时间:2018-05-03 10:35:57

标签: python byte decoding

我有这段代码

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)

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

1 个答案:

答案 0 :(得分:1)

您已将该名称转换为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)

返回的原始名称

简单的解决方案是在for循环中使用不同的变量名来处理self.name_list