我尝试发送通过的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("ééé");
奇迹般有效。
永远不会太晚,回答一个问题,我认为,希望有人会在这里找到答案。
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;
}
文章来源: Sending a string containing special characters through a TcpClient (byte[])