c# 调用php webservice 汉字乱码解决方案 php调用c# webservice 汉字乱码解决方案(亲测)

来源:互联网 发布:php 设置时区 编辑:程序博客网 时间:2024/05/01 21:14

 

基于soa架构去实现EAI  经常会碰到传递汉字乱码问题。如何解决呢?请看下文——

PHP那边是通达OA   gbk编码,而C#这边的默认编码是UTF-8,WEBSERVICE发送数据是以UTF-8发送的

问题来了,如果GB2312转为UTF-8,不管是显式还是隐式,都会出现乱码

于是将GB2312转为BASE64,收到以后再转回GB2312,才解决

这样做,实际上,数据经历了   GB2312--BASE64--UTF8--发送--接收--UTF8--BASE64-GB2312  这么个转换过程,因为BASE64只有英文字符,所以与UTF8互转不会出现乱码,而BASE64与GB2312互转,也不会出现乱码

编解码程序如下:

        public static string DecodeBase64(string code)//解码  base64->gb2312
        {
            string sdecode = "";
            byte[] sconverted = Convert.FromBase64String(code);
            try
            {
                //sdecode = ASCIIEncoding.UTF8.GetString(sconverted); --这是转UTF-8
                sdecode = ASCIIEncoding.GetEncoding("gb2312").GetString(sconverted);//这是转gb2312
            }
            catch
            {
                sdecode = code;            
            }
            return sdecode;
        }
        public static string EncodeBase64(string code)//编码
        {
            string sencode = "";
            byte[] sconverted = Encoding.Default.GetBytes(code);
            try
            {
                sencode = Convert.ToBase64String(sconverted);
            }
            catch
            {
                sencode = code;           
            }


            return sencode;
        }

 
 
c# 端

   private void button1_Click(object sender, EventArgs e)
        {
            string dept_name = EncodeBase64("建设部");
            cs2php.PHP.EventWSDL sc = new PHP.EventWSDL();
            sc.addDept("12345687", dept_name, "7895");
        }


        public static string EncodeBase64(string code)//编码
        {
            string sencode = "";
            byte[] sconverted = Encoding.Default.GetBytes(code);
            try
            {
                sencode = Convert.ToBase64String(sconverted);
            }
            catch
            {
                sencode = code;
            }


            return sencode;
        }

 
 
php端:
$DEPT_NAME= base64_decode($dept_name);
原创粉丝点击