美文网首页
捋一捋Unicode和UTF-8两个的作用

捋一捋Unicode和UTF-8两个的作用

作者: sunxu_cocoa | 来源:发表于2018-10-31 19:34 被阅读0次

    前言

    开发的过程中经常要对文本进行编码之后再传给服务器,比如说上传表情到服务器,这个时候经常会用到什么UTF-8编码,有的人又说什么Unicode编码,这两者都是什么之前一直似懂非懂,自作主张的人为是两种不同的字符编码方式。经过一系列百度之后对这个问题有个更成熟的理解,在此做个笔记。

    首先Unicode是一个字符集,很牛,它包含世界上所有的字符,每个字符对应一个二进制编码,用两个字节保存。这样的话所有国家的所有字符都可以在网络上自由的传输,但是这样做有个问题就是本来英文字母A,用ASCII编码是十进制的65,二进制的01000001,一个字节就可以保存,如果按照Unicode的标准需要两个字节保存,白白浪费了一个字节,这样肯定不好,如果我是美国人也不想要这样的结局,所以就通过人们的智慧就出现了UTF-8。

    UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。那么通过UTF-8编码之后字母A只需要一个字节就可以了,这样美国人就比较开心了,但中国人又不太开心,因为汉字通过UTF-8编码之后通常需要三个字节,多花了一个字节,这个时候相比中国自己的GB2312编码方式显得不是很厚道,但为了世界统一,UTF-8的出现利大于弊,如果每个国家都按照自己的方式来,互联网就乱了。UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

    UTF-8编码规则

    1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

    2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

    这样就形成了如下的UTF-8标记位:

    0xxxxxxx

    110xxxxx 10xxxxxx

    1110xxxx 10xxxxxx 10xxxxxx

    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    总结

    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。所以UTF-8的出现是为了更好的存储和网络传输,如果传输的内容多为字母,那么这种方式将会节约不少流量,就酱。

    相关文章

      网友评论

          本文标题:捋一捋Unicode和UTF-8两个的作用

          本文链接:https://www.haomeiwen.com/subject/uxsbpftx.html