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;
                }
            }

  • 相关阅读:
    Neko's loop HDU-6444(网络赛1007)
    Parameters
    SETLOCAL
    RD / RMDIR Command
    devenv 命令用法
    Cannot determine the location of the VS Common Tools folder.
    'DEVENV' is not recognized as an internal or external command,
    How to change Visual Studio default environment setting
    error signing assembly unknown error
    What is the Xcopy Command?:
  • 原文地址:https://www.cnblogs.com/cztom/p/1398643.html
Copyright © 2011-2022 走看看