Unicode编码之我见

        

     先从编码说起吧,计算机只认识二进制,为了能让计算机识别,我们就定义一个编码标准吧.于是就有了ASCII.

     ASCII编码是目前计算机最通用的编码标准。ASCII编码用一个字节存储,因此最多能表示256个字符。

     这256个字符对于英语国家来说,足够了,但对于中文等繁杂的文字系统,却远远不够,为了解决这一问题, 国际组织制定了Unicode编码,

     它为每种语言中的每个字符设定了唯一的二进制编码.

     它是一种可以容纳世界上所有文字和符号的字符编码方案 。

      Unicode定义了字符编码方案,但没定义具体实现方案.

      根据实现方案不同,分为UTF-8、UTF-16、UTF-32.   UTF-8,UTF-8是互联网上使用最广的一种存储方案.

     Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,我们可以用UltraEdit的”十六进制功能“查看文件的编码,

     Unicode编码的文件会以FF FE开头

     Unicode big endian (大头方式存储)编码的文件会以FE FF开头  

     UTF-8 编码的文件会以EF BB BF开头  

   

    Unicode 编码转换

     Json传输中文时为了防止乱码,通常我们会进行Unicode编码 ,如{userID:"001",nickname:"\u65e0\u8bed\u68a6" }

    下面的代码,将能完成Unicode的与普通字符的转换功能

 

 

 1        /// <summary>
 2        ///  将单个Unicode字符串转换为普通文字,如\u65e0转换为普通文字时,请这样调用ConvertStr("65e0")
 3        /// </summary>
 4        /// <param name="unicodeStr"></param>
 5        /// <returns></returns>

 6        private string ConvertStr(string unicodeStr)
 7        {
 8            if (unicodeStr.Length != 4)
 9            {
10                return String.Empty;
11            }

12
13            byte byteAfter = Convert.ToByte( unicodeStr.Substring(0,2),16);
14            byte byteBefore = Convert.ToByte(unicodeStr.Substring(2), 16);
15
16            return System.Text.Encoding.Unicode.GetString(new byte[] { byteBefore, byteAfter });
17        }

18
19        /// <summary>
20        ///  将单个字符转换为16进制的Unicode字符串
21        /// </summary>
22        /// <param name="str"></param>
23        /// <returns></returns>

24        public string ConvertUnicode(string str)
25        {
26            Byte[] arrByte =  System.Text.Encoding.Unicode.GetBytes(str);
27
28            string strAfter = Convert.ToString(arrByte[0],16);
29            string strBefore = Convert.ToString(arrByte[1],16);
30
31            return strBefore + strAfter;
32        }

 

 

           

 

 

   

posted @ 2009-05-26 11:32  JustCodingLife  阅读(2165)  评论(10编辑  收藏  举报