首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnicodeDecodeError:'utf-8‘编解码器无法解码位置为65535的字节0xd9 :数据的意外结束

UnicodeDecodeError:'utf-8‘编解码器无法解码位置为65535的字节0xd9 :数据的意外结束
EN

Stack Overflow用户
提问于 2019-09-13 05:56:37
回答 1查看 542关注 0票数 0

当我使用:

代码语言:javascript
复制
print(bytes(my_string,'utf-8').decode('utf-8'))

一切都很好,我可以看到我的绳子。

但是,当我使用以下命令将my_string发送到另一台计算机时:

代码语言:javascript
复制
conn.send(bytes(my_string,'utf-8'))

并在另一台机器中接收它,但是当我想解码它时,我会得到以下错误:

代码语言:javascript
复制
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

当我不使用编码打印时:

代码语言:javascript
复制
print(recv_data)

我看到一个文本,但它不是在我的编码。

如何解决这个问题?

更新:

我的服务器:

代码语言:javascript
复制
   conn.send(bytes(my_string,'utf-8'))  
   conn.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, sys.getsizeof(my_string))

注意:当我在服务器上打印my_string时,一切正常。

我对多个连接使用选择器模块。

在客户端,我使用:

代码语言:javascript
复制
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函数的折叠错误:

代码语言:javascript
复制
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数据,例如:

代码语言:javascript
复制
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错误变成:

代码语言:javascript
复制
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 65535: unexpected end of data
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-13 06:03:36

数字65535是一个很大的红旗。

你注意到65535等于16减1的2次方吗?64 and中有65536字节,我打赌您的套接字连接不允许您一次发送超过64 and。

尝试发送一组较小的数据,看看是否有相同的问题。如果是这样的话,您需要弄清楚如何将数据集以块的形式发送,在接收端将它们放在一起,并对整个数据集进行解码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57918017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档