Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t读取阿拉伯语字符串/客户端服务器应用程序c#_C# - Fatal编程技术网

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以外的字符(如阿拉伯语)肯定不相同