我正在用python实现一个服务器/客户机套接字,下面的代码有时会引发UniUnicodeDecodeError异常。我不知道为什么有时行有时不行。请帮忙。。。你知道吗
conn.sendall('200 OK'.encode('utf-8'))
while l:
self.conn.sendall(l)
l = f.read(BUFFER_SIZE)
if not l:
f.close()
self.conn.close()
break
HTTP_RCV_CODE = tcp_sock.recv(BUFFER_SIZE)
HTTP_RCV_CODE = HTTP_RCV_CODE.decode('utf-8')
Server answer: 200 OK Connection close.
Traceback (most recent call last): File "navegador.py", line 40, in HTTP_RCV_CODE = HTTP_RCV_CODE.decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9b in position 49: invalid start byte
只需添加一个时间延迟就可以解决我的问题,显然服务器正在同时发送200ok消息和文件的某些部分。你知道吗
conn.sendall('200 OK'.encode('utf-8'))
time.sleep(0.1)
while l:
self.conn.sendall(l)
l = f.read(BUFFER_SIZE)
if not l:
f.close()
self.conn.close()
break
UTF-8是一种多字节编码。TCP不是消息协议,而是流协议,因此
recv
可以返回将完整的UTF-8多字节字符分开的字节。你知道吗不过,在您的示例中,接收的字节是UTF-8中间字节(它不能作为多字节序列的第一个字节出现),但它出现在接收缓冲区的中间/结尾,因此看起来它不是有效的UTF-8。如果一个有效的UTF-8字符被打断,那么如果它在缓冲区的开头,那么应该得到
invalid start byte
,如果它在缓冲区的结尾,那么应该得到unexpected end of data
。你知道吗相关问题 更多 >
编程相关推荐