C# SOCKET程序,中文乱码情况
服务器每次发送的数据大小为512,但是最后如果为中文字符,服务器可能将中文的第一个字符发过来,第二个字符只能通过下一次传输数据时发送过来。也就导致我在本次进行数据交互时会产生中文乱码的情况。能帮我看一下,有什么办法解决吗?我每次接收到数据都要写入文件。String recMsg = "";
byte[] recByteMsg = new byte[512];
int bytes;
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
Log.PrintLog("FILESERVER-DEBUG","接收数据: "+recMsg); --------------------编程问答-------------------- 这是从哪个网络“范例”抄的代码吧?怎么可能每一次接收部分数据时就解码?
很自然地,接收数据会因网络情况(或者当长连接时跟发送端同时异步发送多条消息也有关)会随时断开。接收到的数据需要保存到一个MemoryStream中,当你接收到消息结束标志时(或者对于短连接方式可以用接收到0个字节为结束标志)才将所有收到过的字节拿出来统一进行字符串解码。 --------------------编程问答-------------------- 昨天无意中从google上链接到博客园上的一个博客,它更离谱,它类似于你这里的代码写
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, recByteMsg.Length);
写出这样代码的人还在博客中号称自己写了一个通讯框架程序。
所以读代码要仔细。许多代码都是好像是在社会培训班的教师放出来的那种代码,没有经过任何高强度的测试就出来当作“实践”范例来教学了。 --------------------编程问答-------------------- UTF-8试试 --------------------编程问答-------------------- #2楼,如果不考虑中午,比如说Base64编码的数据,数据不完整就解包也是说得过的嘛,因为那种情况没必要统一进行字符串解码(GB2312) --------------------编程问答-------------------- 和编码的关系不大
最主要的还是接收不完整时转换肯定会乱码
假如说使用字节流传输
一个中文两个字节
如果只接收了前一个字节就转换
..........
补充:.NET技术 , C#