错误UNICODECODEERROR:“utf8”编解码器无法解码位置0中的字节0xff:套接字编程中的起始字节无效

2024-04-20 11:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我一直在做Python套接字编程。我要做的是向服务器发送一个名为“option”的字符串变量

这是客户端代码

option = "4"
client.send(option.encode())

我收到“错误UnicodeDecodeError:'utf-8'编解码器无法解码位置0中的字节0xff:无效的开始字节”

这是我的服务器代码

option = client.recv(512).decode()

服务器中的选项应该收到一个值为“4”的字符串,但正如我所说,我得到了一个错误。 有人知道怎么解决这个问题吗?提前谢谢


Tags: 字符串代码服务器clientsend客户端字节编程
2条回答

我知道了!所以我改变了

option = client.recv(512).decode()

对此

option = client.recv(1).decode()

成功了!所以我的结论是客户端试图向服务器发送字符串。 我想要发送到服务器的是“4”,所以客户端尝试发送的块大小是1

我不确定,但这对我有用

由于网络编程通常包含多台可以有不同编码的机器,因此应该定义协议的编码。它可以是每个人都必须使用的单一编码(如今这是一个非常好的选择),也可以是协议本身中需要协商编码的方法

在您的情况下,您可以对其进行硬编码:

option = "4"
client.send(option.encode(encoding="utf-8"))

option = client.recv(512).decode(encoding="utf-8")

这仍然有一个明显的错误。recv接收的内容与发件人的大小不完全相同。如果您的编码字符是(比如)3个字节,则接收器可能会接收到部分字符。这意味着您需要某种方法对字符串进行去标记,以便双方都知道给定字符或字符串的结尾。但那是另一回事

有许多现有协议用于处理消息边界、编码等。HTTP、XMLRPC、Zeromq只是其中的一些。这些可能比推出自己的解决方案容易得多

相关问题 更多 >