utf8的编码算法

unicode字符集是大家世界上最周到最全面包车型大巴字符集,大致蕴含了世道上具有的字符。其实能够这样精通,unicode字符集是一张高大的表格,把世界上各类语言的字符和标点符号都编写制定到个中,然后依据一定的顺序给各类字符排号(很缺憾的是对此华语来说,这些顺序不是比照中文拼音的逐个)。有了那张高大的报表,世界上海南大学学多字符就皆有叁个unicode内码(整数)来对号入座。Computer就透过记录字符的unicode码来代表那么些字符,然后提交操作系统,操作系统通过unicode码到字符字体点阵的照射把那些内码转变到字体点阵呈现到大家的显示器上。

         utf8是大家常用的编码格局,在web开辟中选拔utf8编码能一心缓解字符集难点。其实utf8是unicode字符集的一种物理达成,它陈诉了如何急迅的存款和储蓄unicode的内码(就是地方说的字符在字符集的顺序码),讴歌MDXFC2044文书档案(http: //www.ietf.org/rfc/rfc2044.txt?number=2044)描述了什么从二个内码转变到utf8格式的算法。日文不好不要紧,看那个调换表就可以立刻知道了:

   UCS-4 range (hex.)           UTF-8 octet sequence (binary)
   0000 0000-0000 007F   0xxxxxxx
   0000 0080-0000 07FF   110xxxxx 10xxxxxx
   0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
   0001 0000-001F FFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
   0020 0000-03FF FFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
   0400 0000-7FFF FFFF   1111110x 10xxxxxx ... 10xxxxxx

         上边的报表左侧是16进制表示的unicode内码,最终一行的16进制数“7FFF FFFF”是utf8所能表示的内码的最大值,换到10进制是那般的多少个数:2147483647(够大呢:))[对不起,此文最早那儿写错了,已改进]。上边表格中左边一列就是utf8的二进制格式,转变法则可谓心中有数。笔者向来给出算法吧(js代码):


    function toUtf8(code)
    {
     var iByte=0;
     var i=0;
     result="";
     while(code>0x7f)
     {
      iByte=code%0x40;
      code=(code-iByte)/0x40;
      result="%"+(iByte|0x80).toString(16).toUpperCase()+result;
      i++;
     }
     prefix=[0x0,0xc0,0xe0,0xf0,0xf8,0xfc];
     if(i>prefix.length)
     {
      i=5;
     }
     result=""+(code|prefix[i]).toString(16).toUpperCase()+result;
     return result;
    }         

          举个例子字符"汉"的unicode是6C49,把那几个unicode字符表示为三个大整数,然后调换成多字节编码1101一千1001001:
          观望这么些板寸的二进制码系列(110,110001,001001)
          从后往前取
          要是那一个二进制连串唯有后7位(小于128,也正是ascii字符)则一贯取后7位二进制数形成三个utf8字符。
          上面包车型客车字符“汉”二进制系列大于7位,所以取后6位(1001001),加10多变一个utf8字节(一千1001 ,16进制89)。
          剩下的二进制系列(110,110001)从后迈入取6位,加10变异贰个utf8字节(10 1一千1,16进制B1)。
          剩下的二进制连串(110)从后迈入取6位,由于供应不能够满足供给6位,将那么些数和11一千0相或,获得字符11100110,16进制E6
          最终,就收获了utf8编码,16进制表示为E6B189

           【应用领域】            固然这种专门的工作算法大部分早就由开拓工具提供商或然库完结,可是我们照例会在有个别时候须求自个儿完成这种算法:
           一些浏览器(ie5)不帮助encodeURAV4I函数,那么使用ajax提交汉字有三种方案:
                 汉字字符经escape转换成形如"%uXXXX"的字符,服务端使用上述算法将u前边的unicode序号调换成utf8字符
                 使用方面包车型大巴算法结合escape直接在客商端达成encodeUWranglerI效用(推荐使用这种方案)

            实现json-rpc服务             json是javascript的靶子直接量情势,其中字符串必得是unicode字符,汉字要求转变来"uXXXX"的款型。所以大家供给把服务端字符实行json浮动。对于php来讲,未来有三个开源项目JSON-PHP 和 PHP-JSON。
            json-rpc是一种以json为数量格式的rpc协议,能够平价使用与ajax项目中,json-rpc.org是贰个开源的兑现。

本文由华夏彩票发布于华夏彩票网络,转载请注明出处:utf8的编码算法

您可能还会对下面的文章感兴趣: