我有这段代码
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)
名称以字节为单位,这就是为什么我打印该行时尝试将其设为字符串
答案 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
。