本帖最后由 justduit 于 2010-11-08 09:47:55 编辑

解决方案 »

  1.   

    byte[] dest = Encoding.Convert(Encoding.UTF8,Encoding.GetEncoding("GB2312"),Encoding.UTF8.GetBytes(yourUtf8String));
    string result = Encoding.GetEncoding("GB2312").GetString(dest);
      

  2.   

                string name = Encoding.GetEncoding("GB2312").GetString(Encoding.UTF8.GetBytes(yourUtf8String));
      

  3.   


        protected void Page_Load(object sender, EventArgs e)
        {
            string title = "北-";
            string utf = TransGB2312ToUTF8(title);
            Response.Write(string.Format("gb title : {0}", title));
            Response.Write("<br />");
            Response.Write(string.Format("utf title : {0}", utf));
            Response.Write("<br />");
            Response.Write(string.Format("trans title : {0}", Trans(utf)));
            Response.Write("<br />");
            Response.Write(string.Format("trans first title : {0}", TransFirst(utf)));
            Response.Write("<br />");
            Response.Write(string.Format("trans second title : {0}", TransSecond(utf)));
            Response.Write("<br />");
            title = "北京";
            utf = TransGB2312ToUTF8(title);
            Response.Write(string.Format("gb title : {0}", title));
            Response.Write("<br />");
            Response.Write(string.Format("utf title : {0}", utf));
            Response.Write("<br />");
            Response.Write(string.Format("trans title : {0}", Trans(utf)));
            Response.Write("<br />");
            Response.Write(string.Format("trans first title : {0}", TransFirst(utf)));
            Response.Write("<br />");
            Response.Write(string.Format("trans second title : {0}", TransSecond(utf)));
            Response.Write("<br />");
        }    /// <summary>
        /// GB2312转UTF8
        /// </summary>
        /// <param name="input">源字符串</param>
        /// <returns></returns>
        public string TransGB2312ToUTF8(string input)
        {
            string reResult = string.Empty;
            Encoding gb = Encoding.GetEncoding("gb2312");
            byte[] bt = Encoding.Convert(Encoding.Default, Encoding.UTF8, gb.GetBytes(input));
            reResult = gb.GetString(bt);
            return reResult;
        }    /// <summary>
        /// UTF8转GB2312
        /// </summary>
        /// <param name="input">源字符串</param>
        /// <returns></returns>
        public string Trans(string input)
        {
            string res = input;
            UTF8Encoding utf = new UTF8Encoding();
            byte[] bt = Encoding.Convert(Encoding.UTF8, Encoding.Default, utf.GetBytes(res));
            res = utf.GetString(bt);
            return res;
        }
        /// <summary>
        /// UTF8转GB2312(方法一)
        /// </summary>
        /// <param name="input">源字符串</param>
        /// <returns></returns>
        public string TransFirst(string input)
        {
            string res = input;
            byte[] dest = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("GB2312"), Encoding.UTF8.GetBytes(res));
            res = Encoding.GetEncoding("GB2312").GetString(dest);
            return res;
        }    /// <summary>
        /// UTF8转GB2312(方法二)
        /// </summary>
        /// <param name="input">源字符串</param>
        /// <returns></returns>
        public string TransSecond(string input)
        {
            string res = input;
            res = Encoding.GetEncoding("GB2312").GetString(Encoding.UTF8.GetBytes(res));
            return res;
        }
    以上输出结果为:
    gb title : 北-
    utf title : 鍖?
    trans title : ??
    trans first title : 鍖?
    trans second title : 閸?
    gb title : 北京
    utf title : 鍖椾含
    trans title : 北京
    trans first title : 鍖椾含
    trans second title : 閸栨ぞ鍚?当原字符串为偶数个中文时,用Trans方法可以还原回去
    当原字符串为奇数个中文+字母|符号|数字,所有的方法都不能还原回去这是否在转码的过程当中丢失了数据?
      

  4.   

    没有“UTF-8编码字符串”这种说法。可以说“UTF-8编码字节串”。.net的字符串都是UTF-16编码的。
    某些组合是不被UTF-16认可的,所以,不是任何的字节串都能用.net的字符串表示的。