zoukankan      html  css  js  c++  java
  • UNICODE与汉字编码互转

      为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码。将汉字进行UNICODE编码,如:“王”编码后就成了“\u738b”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的一个数字。而一个汉字是由两个字符组成,于是就很容易理解了,“738b”是两个字符,分别是“73”“8b”。但是在将UNICODE字符编码的内容转换为汉字的时候,字符是从后面向前处理的,所以,需要把字符按照顺序“8b”“73”进行组合得到汉字。下面是具体的转化代码。

         

            /// <summary>
            /// 将汉字转换为Unicode
            /// </summary>
            /// <param name="text">要转换的字符串</param>
            /// <returns></returns>
            public static string GBToUnicode(string text)
            {
                byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
                string lowCode = "", temp = "";
                for (int i = 0; i < bytes.Length; i++)
                {
                    if (i % 2 == 0)
                    {
                        temp = System.Convert.ToString(bytes[i], 16);//取出元素4编码内容(两位16进制)
                        if (temp.Length < 2) temp = "0" + temp;
                    }
                    else
                    {
                        string mytemp = Convert.ToString(bytes[i], 16);
                        if (mytemp.Length < 2) mytemp = "0" + mytemp; lowCode = lowCode + @"\u" + mytemp + temp;//取出元素4编码内容(两位16进制)
                    }
                }
                return lowCode;
            }

            /// <summary>
            /// 将Unicode转换为汉字
            /// </summary>
            /// <param name="name">要转换的字符串</param>
            /// <returns></returns>
            public string UnicodeToGB(string text)
            {
                MatchCollection mc = Regex.Matches(text, "([\\w]+)|(\\\\u([\\w]{4}))");
                if (mc != null && mc.Count > 0)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (Match m2 in mc)
                    {
                        string v = m2.Value;
                        if (v.StartsWith("http://www.cnblogs.com/xczt/admin/file://u/"))
                        {
                            string word = v.Substring(2);
                            byte[] codes = new byte[2];
                            int code = Convert.ToInt32(word.Substring(0, 2), 16);
                            int code2 = Convert.ToInt32(word.Substring(2), 16);
                            codes[0] = (byte)code2;
                            codes[1] = (byte)code;
                            sb.Append(Encoding.Unicode.GetString(codes));
                        }
                        else
                        {
                            sb.Append(v);
                        }
                    }
                    return sb.ToString();
                }
                else
                {
                    return text;
                }
            }

  • 相关阅读:
    django框架——十二
    django框架——十一
    请简述一下你所了解的数据源控件有哪些
    在ASP.NET中,<%= %>和<%# %>有什么区别
    请解释ASP.NET中的web页面与其隐藏类之间的关系
    什么是viewstate,能否禁用?是否所用控件都可以禁用
    WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用
    静态类和静态方法的好处
    请写出在ASP.NET中常用的几种页面间传值的方法,并说出它们的特点。
    连接数据库主要有哪几个对象
  • 原文地址:https://www.cnblogs.com/cztom/p/1398643.html
Copyright © 2011-2022 走看看