苏飞论坛

标题: Socket接收字符流出现乱码!? [打印本页]

作者: 老曹    时间: 2013-4-9 14:05
标题: Socket接收字符流出现乱码!?
Socket接收字符流出现乱码怎么解决 ?服务端是Java发送的字符编码是UTF-8,以下两种方法均不行:
[code=csharp]public static string UTF8ToGB2312(string str)
        {
            try
            {
                Encoding utf8 = Encoding.GetEncoding("utf-8");
                Encoding gb2312 = Encoding.GetEncoding("gb2312");//Encoding.Default ,936
                byte[] temp = utf8.GetBytes(str);
                byte[] temp1 = Encoding.Convert(utf8, gb2312, temp);
                string result = gb2312.GetString(temp1);
                return result;
            }
            catch (Exception ex)//(UnsupportedEncodingException ex)
            {
                Console.WriteLine(ex.ToString());
                return null;
            }
        }
        public static string GB2312ToUTF8(string str)
        {
            try
            {
                Encoding uft8 = Encoding.GetEncoding("utf-8");
                Encoding gb2312 = Encoding.GetEncoding("gb2312");
                byte[] temp = gb2312.GetBytes(str);
                Console.WriteLine("gb2312的编码的字节个数:" + temp.Length);
                for (int i = 0; i < temp.Length; i++)
                {
                    Console.WriteLine(Convert.ToUInt16(temp).ToString());
                }
                byte[] temp1 = Encoding.Convert(gb2312, uft8, temp);
                Console.WriteLine("uft8的编码的字节个数:" + temp1.Length);
                for (int i = 0; i < temp1.Length; i++)
                {
                    Console.WriteLine(Convert.ToUInt16(temp1).ToString());
                }
                string result = uft8.GetString(temp1);
                return result;
            }
            catch (Exception ex)//(UnsupportedEncodingException ex)
            {
                Console.WriteLine(ex.ToString());
                return null;
            }
        }[/code]
作者: 站长苏飞    时间: 2013-4-9 14:42
一般就这几种你可以再试试
[code=csharp] string str = "苏飞";
            //utf-8
            str = Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(str));
            //ascii
            str = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(str));
            //Default
            str = Encoding.Default.GetString(Encoding.ASCII.GetBytes(str));
            //Unicode
            str = Encoding.Unicode.GetString(Encoding.ASCII.GetBytes(str));
            //gbk
            str = Encoding.GetEncoding("gbk").GetString(Encoding.ASCII.GetBytes(str));
            //gb2312
            str = Encoding.GetEncoding("gb2312").GetString(Encoding.ASCII.GetBytes(str));[/code]
如果还不行我感觉应该是流的问题,可以直接将接收到的流进行转化,而不是转成Str后再转,
直接在接收的时候进行编码设置。

作者: 站长苏飞    时间: 2013-4-9 14:43
建议你发一串乱码的文字上来,我转转看就知道了
作者: 印醒    时间: 2013-4-9 14:45
应该是你从网络上接收到的数据转换的格式不正确,看你代码里有UTF-8和gb2312,可能是不支持你要转换前或者转换后的格式,你试试换种格式看行不




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4