当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,