从 Python 到 C# 的套接字消息通过乱码

本文关键字:消息 套接字 Python | 更新日期: 2023-09-27 18:34:54

我正在尝试使用simplejson和 Json.NET 在Python服务器和C#客户端之间建立一个非常基本的基于ZeroMQ的套接字链接。我尝试从 Python 发送一个字典并将其读入 C# 中的对象中。蟒蛇代码:

message = {'MessageType':"None", 'ContentType':"None", 'Content':"OK"}
message_blob = simplejson.dumps(message).encode(encoding = "UTF-8")
alive_socket.send(message_blob)

消息以普通 UTF-8 字符串发送,或者,如果我使用 UTF-16,则作为"''xff''xfe{''x00"''x00..."等。

C#中的代码是我的问题所在:

string reply = client.Receive(Encoding.UTF8);

UTF-8 消息接收为"≻潃瑮湥≴›..."等。

我尝试使用 UTF-16 并且消息正常,但第一个符号仍然是小端序 ''xFF ''xFE BOM,所以当我尝试将其馈送到解串器时,

PythonMessage replyMessage = JsonConvert.DeserializeObject<PythonMessage>(reply);
//PythonMessage is just a very simple class with properties,
//not relevant to the problem

我收到一个错误(显然发生在第一个符号 ''xFF(:

Unexpected character encountered while parsing value: .

我使用编码的方式显然有问题。你能告诉我正确的方法吗?

从 Python 到 C# 的套接字消息通过乱码

字节顺序标记在 UTF-16 中是必需的。您可以使用 UTF-16LE 或 UTF-16BE 来假定特定的字节顺序,并且不会生成 BOM。也就是说,使用:

message_blob = simplejson.dumps(message).encode(encoding = "UTF-16le")