通过TcpClient的发送包含特殊字符的字符串(字节[])(Sending a string co

2019-07-20 13:28发布

我尝试发送通过的TcpClient(字节[])包含特殊字符的字符串。 下面是一个例子:

  • 客户端进入“火焰”在一个文本框
  • 客户端转换的字符串使用特定编码为byte [](我已经尝试了所有预定义的人再加上一些像“ISO-8859-1”)
  • 客户端通过TCP发送字节[]
  • 服务器接收和输出具有相同的编码重新转换的串(到列表框)

编辑:

我忘了提,结果字符串为“AM?”。

编辑-2(根据要求,这里的一些代码):

@DJKRAZE这里的一些代码:

byte[] buffer = Encoding.ASCII.GetBytes("amé");
(TcpClient)server.Client.Send(buffer);

在服务器端:

byte[] buffer = new byte[1024];
Client.Recieve(buffer);
string message = Encoding.ASCII.GetString(buffer);
ListBox1.Items.Add(message);

出现在列表框中的字符串是“上午?”

===解决方案===

Encoding encoding = Encoding.GetEncoding("iso-8859-1");
byte[] message = encoding.GetBytes("babé");

更新:

简单地使用Encoding.Utf8.GetBytes("ééé"); 奇迹般有效。

Answer 1:

永远不会太晚,回答一个问题,我认为,希望有人会在这里找到答案。

C#中使用16个字符,和ASCII他们截断至8位,以适应一个字节。 经过一番研究,我发现,UTF-8是特殊字符的最佳编码。

//data to send via TCP or any stream/file
byte[] string_to_send = UTF8Encoding.UTF8.GetBytes("amé");

//when receiving, pass the array in this to get the string back
string received_string = UTF8Encoding.UTF8.GetString(message_to_send);


Answer 2:

您的问题似乎是Encoding.ASCII.GetBytes("amé");Encoding.ASCII.GetString(buffer); 调用,如通过暗示 - 在他的评论“500内部服务器错误”。

所述é字符是其在UTF-8与字节序列编码的多字节字符C3 A9 。 当您使用Encoding.ASCII类编码和解码的é字符转换为一个问号,因为它没有直接的ASCII编码。 这是在ASCII没有直接编码任何字符也是如此。

更改您的代码中使用Encoding.UTF8.GetBytes()Encoding.UTF8.GetString()它应该为你工作。



Answer 3:

你的问题,你的错误是,我不清楚,但使用Base64String可能会解决问题
像这样的事情

static public string EncodeTo64(string toEncode)
    {
      byte[] toEncodeAsBytes
            = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
      string returnValue
            = System.Convert.ToBase64String(toEncodeAsBytes);
      return returnValue;
    }

static public string DecodeFrom64(string encodedData)
    {
      byte[] encodedDataAsBytes
          = System.Convert.FromBase64String(encodedData);
      string returnValue =
         System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
      return returnValue;
    }


文章来源: Sending a string containing special characters through a TcpClient (byte[])