http://community.csdn.net/Expert/topic/5366/5366077.xml?temp=.6637689

解决方案 »

  1.   

    return Encoding.GetEncoding(To).GetString(Encoding.GetEncoding(From).GetBytes(str));
    感觉是Encoding.GetEncoding的问题!我也做过一个类似的东西,就是因为读取文件的Bytes然后显示出来就是乱码了!
      

  2.   

    以下是去年用另外一个帐户问的同样问题
    http://community.csdn.net/Expert/topic/5351/5351114.xml?temp=.7420465
    http://community.csdn.net/Expert/topic/5348/5348369.xml?temp=.4643976
    http://community.csdn.net/Expert/topic/5342/5342300.xml?temp=1.884097E-02
      

  3.   

    protected void Page_Load(object sender, EventArgs e)
        {
            string a = "中华人民共和国";
            Response.Write(ConertStr(a, "utf-8", "gb2312"));
            Response.Write("<br>");
            Response.Write(ConertStr(a, "gb2312", "utf-8"));    }    string ConertStr(string str, string From, string To)
        {        byte[] bs = System.Text.Encoding.GetEncoding(From).GetBytes(str);
            bs = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(From), System.Text.Encoding.GetEncoding(To), bs);
            string res = System.Text.Encoding.GetEncoding(To).GetString(bs);
            return res;    }
      

  4.   

    先用urlencode再urldecode
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  5.   

    单数?双数?  没遇见过,是否是半角全角的问题???另外UTF8是压缩传输的(虽然长度应该是GB2312的两倍,但实际上并没那么多) 会不会有这个原因?
      

  6.   

    return Encoding.GetEncoding(To).GetString(Encoding.GetEncoding(From).GetBytes(str));
    代码读取有问题!
      

  7.   

    为什么要做这个转换呢?你把整个网站的编码统一为GB2312或者utf8看看
      

  8.   

    protected void Page_Load(object sender, EventArgs e)
        {        
            string a = "中华■人民共3和国2●"; //这里的■32●是全角字符 也未出现错误
            Response.Write(ConertStr(a, "utf-8", "gb2312"));
            Response.Write("<br>");
            Response.Write(ConertStr(a, "gb2312", "utf-8"));           }    string ConertStr(string str, string From, string To)
        {        byte[] bs = System.Text.Encoding.GetEncoding(From).GetBytes(str);
            bs = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(From), System.Text.Encoding.GetEncoding(To), bs);
            string res = System.Text.Encoding.GetEncoding(To).GetString(bs);
            return res;    }
      

  9.   

    我之前也遇到过乱码,而且是有些页面会有些不会,在web.config把所有编码改成utf-8就好了,根本不需要转换。
      

  10.   

    Google了一下,感觉问题是在UpdatePanel。好像不论你的服务器requestEncoding和responseEncoding怎么配置,UpdatePanel总是用Utf-8输出,而你的website是设定成GB2312德,所以有乱码。你的解决方法并不是正统的编码转换,而是一个Hack方案:
    ConvertStr(str, "GB2312", "UTF-8")
    这个调用先把str用GB2312解码成一个byte[],
    然后把这个本应该是GB2312的byte[]强制使用UTF-8编码成字符串,结果就是一个乱码子串(你可以打印出来看一下)。
    之所以客户显示有时候正常,是因为UpdatePanel内部又把它按UTF-8解析输出,然后的结果如果按GB2312显示的话和原先的恰好一样。原字符串 ---> gb2312 byte[] ---> utf-8 编码 (乱码) --> UpdatePanel uft-8解码输出 --> IE按gb2312显示这个方案的问题是Gb2312和utf-8不兼容,gb2312 byte[]不能完全用utf-8编码,有些字节会被丢弃。不用javascript的话没有好的解决方法。我想得到的方法是把output用BASE64编码,输出到client,然后javascript解码并且输出。
      

  11.   

    下面的程序模拟这个过程,尝试不同的输入,有时候输出正常,有时候是乱码。using System;
    using System.Collections.Generic;using System.Text;namespace EncodingTest
    {
        class Program
        {
            public static string Convert(string str, string From, string To)
            {
                
                return Encoding.GetEncoding(To).GetString(Encoding.GetEncoding(From).GetBytes(str));
            }        public static string Output(string str)
            {
                StringBuilder sb = new StringBuilder();
                foreach (char c in str)
                {
                    sb.AppendFormat("{0:X} ", (int)c);
                }
                return sb.ToString();
            }        static void Main(string[] args)
            {
                string str = "什么啊";
                string cov1 = Convert(str, "GB2312", "UTF-8");
                string cov2 = Convert(cov1, "UTF-8", "GB2312");
                Console.WriteLine("{0}\t=\t{1}", str, Output(str));
                Console.WriteLine("{0}\t=\t{1}", cov2, Output(cov2));
            }
        }
    }