Can';t读取阿拉伯语字符串/客户端服务器应用程序c#
我正在用英语编写客户机/服务器应用程序和一切工作正常,但当我用阿拉伯语发送消息时,它带有字符串字符。 我不知道我能做些什么才能让阿拉伯语信息像英语一样正常工作 提前谢谢Can';t读取阿拉伯语字符串/客户端服务器应用程序c#,c#,C#,我正在用英语编写客户机/服务器应用程序和一切工作正常,但当我用阿拉伯语发送消息时,它带有字符串字符。 我不知道我能做些什么才能让阿拉伯语信息像英语一样正常工作 提前谢谢 public Packet(byte[] dataStream) { // Read the data identifier from the beginning of the stream (4 bytes) this.dataIdentifier = (DataIdentifier)BitConvert
public Packet(byte[] dataStream)
{
// Read the data identifier from the beginning of the stream (4 bytes)
this.dataIdentifier = (DataIdentifier)BitConverter.ToInt32(dataStream, 0);
// Read the length of the name (4 bytes)
int nameLength = BitConverter.ToInt32(dataStream, 4);
// Read the length of the message (4 bytes)
int msgLength = BitConverter.ToInt32(dataStream, 8);
// Read the name field
if (nameLength > 0)
this.name = Encoding.UTF8.GetString(dataStream, 12, nameLength);
else
this.name = null;
// Read the message field
if (msgLength > 0)
this.message = Encoding.UTF8.GetString(dataStream, 12 + nameLength, msgLength);
else
this.message = null;
}
// Converts the packet into a byte array for sending/receiving
public byte[] GetDataStream()
{
List<byte> dataStream = new List<byte>();
// Add the dataIdentifier
dataStream.AddRange(BitConverter.GetBytes((int)this.dataIdentifier));
// Add the name length
if (this.name != null)
dataStream.AddRange(BitConverter.GetBytes(this.name.Length));
else
dataStream.AddRange(BitConverter.GetBytes(0));
// Add the message length
if (this.message != null)
dataStream.AddRange(BitConverter.GetBytes(this.message.Length));
else
dataStream.AddRange(BitConverter.GetBytes(0));
// Add the name
if (this.name != null)
dataStream.AddRange(Encoding.UTF8.GetBytes(this.name));
// Add the message
if (this.message != null)
dataStream.AddRange(Encoding.UTF8.GetBytes(this.message));
return dataStream.ToArray();
}
// Initialise a packet object to store the data to be sent
Packet sendData = new Packet();
sendData.ChatName = this.name;
sendData.ChatMessage = txtMessage.Text.Trim();
sendData.ChatDataIdentifier = DataIdentifier.Message;
// Get packet as byte array
byte[] byteData = sendData.GetDataStream();
// Send packet to the server
clientSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer, new AsyncCallback(this.SendData), null);
txtMessage.Text = string.Empty;
公共数据包(字节[]数据流)
{
//从流的开头读取数据标识符(4字节)
this.dataIdentifier=(dataIdentifier)BitConverter.ToInt32(数据流,0);
//读取名称的长度(4字节)
int nameLength=BitConverter.ToInt32(数据流,4);
//读取消息的长度(4字节)
int-msgLength=BitConverter.ToInt32(数据流,8);
//读取名称字段
如果(名称长度>0)
this.name=Encoding.UTF8.GetString(dataStream,12,nameLength);
其他的
this.name=null;
//阅读消息字段
如果(msgLength>0)
this.message=Encoding.UTF8.GetString(数据流,12+nameLength,msgLength);
其他的
this.message=null;
}
//将数据包转换为用于发送/接收的字节数组
公共字节[]GetDataStream()
{
列表数据流=新列表();
//添加数据标识符
AddRange(BitConverter.GetBytes((int)this.dataIdentifier));
//添加名称长度
if(this.name!=null)
AddRange(BitConverter.GetBytes(this.name.Length));
其他的
dataStream.AddRange(BitConverter.GetBytes(0));
//添加消息长度
如果(this.message!=null)
AddRange(BitConverter.GetBytes(this.message.Length));
其他的
dataStream.AddRange(BitConverter.GetBytes(0));
//添加名称
if(this.name!=null)
AddRange(Encoding.UTF8.GetBytes(this.name));
//添加消息
如果(this.message!=null)
AddRange(Encoding.UTF8.GetBytes(this.message));
返回dataStream.ToArray();
}
//初始化数据包对象以存储要发送的数据
数据包sendData=新数据包();
sendData.ChatName=this.name;
sendData.ChatMessage=txtMessage.Text.Trim();
sendData.ChatDataIdentifier=DataIdentifier.Message;
//以字节数组形式获取数据包
字节[]byteData=sendData.GetDataStream();
//将数据包发送到服务器
clientSocket.BeginSendTo(byteData,0,byteData.Length,SocketFlags.None,epServer,new-AsyncCallback(this.SendData),null);
txtMessage.Text=string.Empty;
您确定它是UTF8而不是阿拉伯语代码页吗?谁发送数据?您编码字符串长度,但不是每个字符串的UTF8字节数。这些值对于ASCII字符可能相同,但对于ASCII以外的字符(如阿拉伯语)肯定不相同