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
循环中使用不同的变量名
我有这个代码
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
循环中使用不同的变量名