首页 新闻 搜索 专区 学院

python3编码问题

0
悬赏园豆:5 [已解决问题] 解决于 2018-10-04 17:32
tcpCliSock.send('[%s] %s' %(ctime().encode('utf-8'),data))
报错信息:TypeError: a bytes-like object is required, not 'str'
可是我的data已经是bytes类型了,ctime()也执行了编码了。
大神来教教我吧~
问题补充:
tcpCliSock.send(('[%s] %s' % (ctime(), data)).encode())

我发现这样就可以运行不报错,但是结果decode()后还是:[Thu Oct  4 16:56:33 2018] b'\xe7\x8e\x8b'

从MH到其他的主页 从MH到其他 | 初学一级 | 园豆:140
提问于:2018-10-04 16:48
< >
分享
最佳答案
0

自己实验了半天,终于解决了。问题是在于data已经是bytes类型了(必须是,否则客户端不能传递给服务器)。在服务器端,需要将ctime()encode为bytes类型,但是如果为将data先转化为str类型,那么客户端最后收到的data就无法再转化。完整代码如下:

#服务器
from
socket import * from time import ctime HOST = '' PORT = 21507 BUFSIZE = 1026 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) while True: print('waiting for connection...') tcpCliSock, addr = tcpSerSock.accept() print('...connected from:', addr) while True: data = tcpCliSock.recv(BUFSIZE) if not data: break print(type(data)) tcpCliSock.send(('[{}] {}'.format(ctime(), data.decode())).encode()) tcpCliSock.close()
#用户
from
socket import * HOST = 'localhost' PORT = 21507 BUFSIZE = 1026 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR) while True: data = input('> ') if not data: break tcpCliSock.send(data.encode()) data = tcpCliSock.recv(BUFSIZE) print(type(data)) if not data: break print(data.decode()) tcpCliSock.close()
从MH到其他 | 初学一级 |园豆:140 | 2018-10-04 17:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册