http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 10284|回复: 3

[C#语言基础] Socket接收字符流出现乱码!?

[复制链接]
发表于 2013-4-9 14:05:45 | 显示全部楼层 |阅读模式
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]


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-4-9 14:42:47 | 显示全部楼层
一般就这几种你可以再试试
[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:29 | 显示全部楼层
建议你发一串乱码的文字上来,我转转看就知道了
发表于 2013-4-9 14:45:45 | 显示全部楼层
应该是你从网络上接收到的数据转换的格式不正确,看你代码里有UTF-8和gb2312,可能是不支持你要转换前或者转换后的格式,你试试换种格式看行不
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-17 19:32

© 2014-2021

快速回复 返回顶部 返回列表