通过TcpClient发送包含特殊字符的字符串(byte[])

本文关键字:byte 字符串 TcpClient 包含 特殊字符 通过 | 更新日期: 2023-09-27 18:01:21

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

  • 客户端在文本框中输入"am"
  • 客户端将字符串转换为字节[]使用一定的编码(我已经尝试了所有预定义的加上一些像"iso-8859-1")
  • 客户端通过TCP发送字节[]
  • 服务器接收并输出用相同编码重新转换的字符串(到列表框)
编辑:

我忘了说结果字符串是"am?"。

Edit-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);

出现在列表框中的字符串是"am?"

===解决方案===

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

简单地使用Encoding.Utf8.GetBytes("ééé");就像魅力一样。

通过TcpClient发送包含特殊字符的字符串(byte[])

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

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);

您的问题似乎是Encoding.ASCII.GetBytes("amé");Encoding.ASCII.GetString(buffer);调用,正如在他的评论中'500 -内部服务器错误'所暗示的那样。

é字符是一个多字节字符,用UTF-8编码,字节序列为C3 A9。当您使用Encoding.ASCII类进行编码和解码时,é字符被转换为问号,因为它没有直接的ASCII编码。对于ASCII中没有直接编码的任何字符都是如此。

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

你的问题和你的错误我不清楚,但使用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;
    }