当我使用:
print(bytes(my_string,'utf-8').decode('utf-8'))一切都很好,我可以看到我的绳子。
但是,当我使用以下命令将my_string发送到另一台计算机时:
conn.send(bytes(my_string,'utf-8'))并在另一台机器中接收它,但是当我想解码它时,我会得到以下错误:
print(recv_data.decode('utf-8'))
File "./multiconn-client.py", line 86, in service_connection
print(recv_data.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 65535: unexpected end of data当我不使用编码打印时:
print(recv_data)我看到一个文本,但它不是在我的编码。
如何解决这个问题?
更新:
我的服务器:
conn.send(bytes(my_string,'utf-8'))
conn.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, sys.getsizeof(my_string))注意:当我在服务器上打印my_string时,一切正常。
我对多个连接使用选择器模块。
在客户端,我使用:
def service_connection(key, mask):
sock = key.fileobj
data = key.data
if mask & selectors.EVENT_READ:
buff = sock.getsockopt(SOL_SOCKET,SO_RCVBUF)
recv_data = sock.recv(1024 | buff)
if recv_data:
buff = sock.getsockopt(SOL_SOCKET,SO_RCVBUF)
print('In cli getsizeof of recv_data:',sys.getsizeof(recv_data))
recv_data += recv_data
data.recv_total += len(recv_data)
print(recv_data.decode('utf-8')) #######error line is here.Mow只得到decode函数的折叠错误:
Traceback (most recent call last):
File "./multiconn-client.py", line 122, in <module>
service_connection(key, mask)
File "./multiconn-client.py", line 99, in service_connection
print(recv_data.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 65535: invalid continuation byte注意:当我使用没有print(recv_data)函数的decode时,它会打印我的unicde数据,例如:
b'm01,2,130,12_18,\xd9\x88\xd9\x8e\xd9\x85\xd9\x8e\xd9\x86 \xd9\x8a\xd9\x8e\xd8\xb1\xd9\x92\xd8\xba\xd9\x8e\xd8\xa8\xd9\x8f \xd8\xb9\xd9\x8e\xd9\x86 \xd9\x85\xd9\x91\xd9\x90\xd9\x84\xd9\x91\xd9\x8e\xd8\xa9\xd9\x90 \xd8\xa5\xd9\x90\xd8\xa8\xd9\x92\xd8\xb1\xd9\x8e\xd9\xb0\xd9\x87\xd9\x90\xdb\xa6\xd9\x85\xd9\x8e \xd8\xa5\xd9\x90\xd9\x84\xd9\x91\xd9\x8e\xd8\xa7 \xd9\x85\xd9\x8e\xd9\x86 \xd8\xb3\xd9\x8e\xd9\x81\xd9\x90\xd9\x87\xd9\x8e \xd9\x86\xd9\x8e\xd9\x81\xd9\x92\xd8\xb3\xd9\x8e\xd9\x87\xd9\x8f\xdb\xa5 \xd9\x88\xd9\x8e\xd9\x84\xd9\x8e\xd9\x82\xd9\x8e\xd8\xaf\xd9\x90 \xd9\xb1\xd8\xb5\xd9\x92\xd8\xb7\xd9\x8e\xd9\x81\xd9\x8e\xd9\x8a\xd9\x92\xd9\x86\xd9\x8e\xd9\xb0\xd9\x87\xd9\x8f \xd9\x81\xd9\x90\xd9\x89 \xd9\xb1\xd9\x84\xd8\xaf\xd9\x91\xd9\x8f\xd9\x86\xd9\x92\xd9\x8a\xd9\x8e\xd8\xa7 \xd9\x88\xd9\x8e\xd8\xa5\xd9\x90\xd9\x86\xd9\x91\xd9\x8e\xd9\x87\xd9\x8f\xdb\xa5 \xd9\x81\xd9\x90\xd9\x89 \xd9\xb1\xd9\x84\xd9\x92\xd8\xa1\xd9\x8e\xd8\xa7\xd8\xae\xd9\x90\xd8\xb1\xd9\x8e\xd8\xa9\xd9\x90 \xd9\x84\xd9\x8e\xd9\x85\xd9\x90\xd9\x86\xd9\x8e \xd9\xb1\xd9\x84\xd8\xb5\xd9\x91\xd9\x8e\xd9\xb0\xd9\x84\xd9\x90\xd8\xad\xd9\x90\xd9\x8a\xd9\x86\xd9\x8e#m02,2,238,3_4,\xd8\xad\xd9\x8e\xd9\xb0\xd9\x81\xd9\x90\xd8\xb8\xd9\x8f\xd9\x88\xd8\xa7\xdb\x9f \xd8\xb9\xd9\x8e\xd9\x84\xd9\x8e\xd9\x89 \xd9\xb1\xd9\x84\xd8\xb5\xd9\x91\xd9\x8e\xd9\x84\xd9\x8e\xd9\x88\xd9\x8e\xd9\xb0\xd8\xaa\xd9\x90 \xd9\x88\xd9\x8e\xd9\xb1\xd9\x84\xd8\xb5\xd9\x91\xd9\x8e\xd9\x84\xd9\x8e\xd9\x88\xd9\xb0\xd8\xa9\xd9\x90 \xd9\xb1\xd9\x84\xd9\x92\xd9\x88\xd9\x8f\xd8\xb3\xd9\x92\xd8\xb7\xd9\x8e\xd9\x89\xd9\xb0 \xd9\x88\xd9\x8e\xd9\x82\xd9\x8f\xd9\x88\xd9\x85\xd9\x8f\xd9\x88\xd8\xa7\xdb\x9f \xd9\x84\xd9\x90\xd9\x84\xd9\x91\xd9\x8e\xd9\x87\xd9\x90 \xd9\x82\xd9\x8e\xd9\xb0\xd9\x86\xd9\x90\xd8\xaa\xd9\x90\xd9\x8a\xd9\x86\xd9\x8e#m03,2,277,5_7,\xd8\xa5\xd9\x90\xd9\x86\xd9\x91\xd9\x8e \xd9\xb1\xd9\x84\xd9\x91\xd9\x8e\xd8\xb0\xd9\x90\xd9\x8a\xd9\x86\xd9\x8e \xd8\xa1\xd9\x8e\xd8\xa7\xd9\x85\xd9\x8e\xd9\x86\xd9\x8f\xd9\x88\xd8\xa7\xdb\x9f \xd9\x88\xd9\x8e\xd8\xb9\xd9\x8e\xd9\x85\xd9\x90\xd9\x84\xd9\x8f\xd9\x88\xd8\xa7\xdb\x9f \xd9\xb1\xd9\x84\xd8\xb5\xd9\x91\xd9\x8e\xd9\xb0\xd9\x84\xd9\x90\xd8\xad\xd9\x8e\xd9\xb0\xd8\xaa\xd9\x90 \xd9\x88\xd9\x8e\xd8\xa3\xd9\x8e\xd9\x82\xd9\x8e\xd8\xa7\xd9\x85\xd9\x8f\xd9\x88\xd8\xa7\xdb\x9f \xd9\xb1\xd9\x84\xd8\xb5\xd9\x91\xd9\x8e\xd9\x84\xd9\x8e\xd9\x88\xd9\xb0\xd8\xa9\xd9\x8e \xd9\x88\xd9\x8e\xd8\xa1\xd9\x8e\xd8\xa7\xd8\xaa\xd9\x8e\xd9\x88\xd9\x8f\xd8\xa7\xdb\x9f \xd9\xb1\xd9\x84\xd8\xb2\xd9\x91\xd9\x8e\xd9\x83\xd9\x8e\xd9\x88\xd9\xb0\xd8\xa9\xd9\x8e \xd9\x84\xd9\x8e\xd9\x87\xd9\x8f\xd9\x85\xd9\x92 \xd8\xa3\xd9\x8e\xd8\xac\xd9\x92\xd8\xb1\xd9\x8f\xd9\x87\xd9\x8f\xd9\x85\xd9\x92 \xd8\xb9\xd9\x90\xd9\x86\xd8\xaf\xd9\x8e \xd8\xb1\xd9\x8e\xd8\xa8\xd9\x91\xd9\x90\xd9\x87\xd9\x90\xd9\x85\xd9\x92 \xd9\x88\xd9\x8e\xd9\x84\xd9\x8e\xd8\xa7 \xd8\xae\xd9\x8e\xd9\x88\xd9\x92\xd9\x81\xd9\x8c \xd8\xb9\xd9\x8e\xd9\x84\xd9\x8e\xd9\x8a\xd9\x92\xd9\x87\xd9\x90\xd9\x85\xd9\x92 \xd9\x88\xd9\x8e\xd9\x84\xd9\x8e\xd8\xa7 \xd9\x87\xd9\x8f\xd9\x85\xd9\x92 \xd9\x8a\xd9\x8e\xd8\xad\xd9\x92\xd8\xb2\xd9\x8e\xd9\x86\xd9\x8f\xd9\x88\xd9\x86\xd9\x8e#m04,3,39,5_20,\xd9\x81\xd9\x8e\xd9\x86\xd9\x8e\xd8\xa7\xd8\xaf\xd9\x8e\xd8\xaa\xd9\x92\xd9\x87\xd9\x8f \xd9\xb1\xd9\x84\xd9\x92\xd9\x85\xd9\x8e\xd9\x84\xd9\x8e\xd9\xb0\xd9\x93\xd8\xa6\xd9\x90\xd9\x83\xd9\x8e\xd8\xa9\xd9\x8f \xd9\x88\xd9\x8e\xd9\x87\xd9\x8f\xd9\x88\xd9\x8e \xd9\x82\xd9\x8e\xd8\xa7\xd9\x93\xd8\xa6\xd9\x90\xd9\x85\xd9\x8c \xd9\x8a\xd9\x8f\xd8\xb5\xd9\x8e\xd9\x84\xd9\x91\xd9\x90\xd9\x89 \xd9\x81\xd9\x90\xd9\x89 \xd9\xb1\xd9\x84\xd9\x92\xd9\x85\xd9\x90\xd8\xad\xd9\x92\xd8\xb1\xd9\x8e\xd8\xa7\xd8\xa8\xd9\x90 \xd8\xa3\xd9\x8e\xd9\x86\xd9\x91\xd9\x8e \xd9\xb1\xd9\x84\xd9\x84\xd9\x91\xd9\x8e\xd9\x87\xd9\x8e \xd9\x8a\xd9\x8f\xd8\xa8\xd9\x8e\xd8\xb4\xd9\x91\xd9\x90\xd8\xb1\xd9\x8f\xd9\x83\xd9\x8e \xd8\xa8\xd9\x90\xd9\x8a\xd9\x8e\xd8\xad\xd9\x92\xd9\x8a\xd9\x8e\xd9\x89\xd9\xb0 \xd9\x85\xd9\x8f\xd8\xb5\xd9\x8e\xd8\xaf\xd9\x91\xd9\x90\xd9\x82\xd9\x8b\xdb\xa2\xd8\xa7 \xd8\xa8\xd9\x90\xd9\x83\xd9\x8e\xd9\x84\xd9\x90\xd9\x85\xd9\x8e\xd8\xa9\xd9\x8d \xd9\x85\xd9\x91\xd9\x90\xd9\x86\xd9\x8e \xd9\xb1\xd9\x84\xd9\x84\xd9\x91\xd9\x8e\xd9\x87\xd9\x90 \xd9\x88\xd9\x8e\xd8\xb3\xd9\x8e\xd9\x8a\xd9\x91\xd9\x90\xd8\xaf\xd9\x8b\xd8\xa7 \xd9\x88\xd9\x8e\xd8\xad\xd9\x8e\xd8\xb5\xd9\x8f\xd9\x88\xd8\xb1\xd9\x8b\xd8\xa7 \xd9\x88\xd9\x8e\xd9\x86\xd9\x8e\xd8\xa8\xd9\x90\xd9\x8a\xd9\x91\xd9\x8b\xd8\xa7 \xd9\x85\xd9\x91\xd9\x90\xd9\x86\xd9\x8e \xd9\xb1\xd9\x84\xd8\xb5\xd9\x91\xd9\x8e\xd9\xb0\xd9\x84\xd9\x90\xd8\xad\xd9\x90\xd9\x8a\xd9\x86\xd9\x8e#m05,4,77,39_10,\xd8\xa3\xd9\x8当我注释行时,recv_data += recv_data错误变成:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 65535: unexpected end of data发布于 2019-09-13 06:03:36
数字65535是一个很大的红旗。
你注意到65535等于16减1的2次方吗?64 and中有65536字节,我打赌您的套接字连接不允许您一次发送超过64 and。
尝试发送一组较小的数据,看看是否有相同的问题。如果是这样的话,您需要弄清楚如何将数据集以块的形式发送,在接收端将它们放在一起,并对整个数据集进行解码。
https://stackoverflow.com/questions/57918017
复制相似问题