utf-8和Unicode的区别

utf-8和Unicode到底有什么区别?是存储方式不一样?编码方式不一样?它们看起来彷佛很类似,可是实际上他们并非同一个层次的概念编码

要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。翻译

  • 众所周知,在盘古开天辟地以前,sorry ,走错片场了(⊙o⊙)…在计算机发明的时候 ,因为计算机你只能表示二进制的数据,美帝人民为了交流通讯方便,约定了一个编码系统,就是ASCII码,把abc..xyz...ABC...XYZ...!@#...等字符分别和0,1,2,3,4......对应,发现差很少恰好128个数,半个字节的长度,为了防止之后须要为新的符号编码,因而干脆取一个字节,最高位置为0。后七位从0-127分别对每个符号编码。
    • 因而,计算机每次读取一个字节,而后参照ASCII表把这些编码翻译成字符。美国人民很高兴,拿着本身玩去了.......
  • 后来欧洲人也玩计算机,发现不行啊,还有不少符号(法语,德语)ASCII没办法表示啊,因而欧洲人本身也撸了一套编码,一个字节的长度,把最高位也用掉了。这套编码叫ISO。code

    • 和ASCII表相似,计算机也是每次只读一个字节,而后按照ISO表,解码出字符。因而欧洲人民也很高兴。
  • 中国人不高兴了,特么咱们汉字有几万个,经常使用的就有几千个,没有两个字节根本交不了货。因而勤劳勇敢的中国人民就破天荒的用了两个字节来表示中文。整出一套GBK。为了现实我中华民族兼容并蓄,咱们兼容了ASCII编码。orm

    • gbk编码规定,计算机不能在每次都只读一个字节那么死板了,你要先看看第一位是否是为0,要是为0 的话,就看成ASCII码来读入一个字节,否则的话就读入两个字节。utf-8

    • 计算机 : WTF ?? !!资源

因而天下就很乱了,欧洲人看不懂咱们发过去的信息,咱们也看不懂他们的东西,美国人看不懂个人东西,不过咱们能看懂他们的信息。。。哈哈。unicode

总之,天下大乱,群雄并起,百姓生灵涂........io

这个时候,就有个国际组织站出来了,说,这么着吧,我来撸一套编码,把你们的编码都概括进来。因而unicode编码就出现了。这套编码表的编号从0一直算到了100多万(三个字节)。每个区间都对应着一种语言的编码。目前几乎收纳了全世界大部分的字符。全部的字符都有惟一的编号,这就解决了解码的冲突,因而天下大定!可是,unicode把你们都概括进来,却没有为编码的二进制传输和二进制解码作出规定。只留下一句:大哥只能帮你到这里了。form

我知道你必定在想,要个毛的规定啊,每次让计算机读取三个字节而后参照Unicode表解码就行了。想法是好的,可是若是相似于1号编码这样的小数据编号也要三个字节的话,那么也就是0x000001,这简直就是浪费啊,明明一个字节就能够表示了,你非得整三个,因此你究竟是几个意思呢?class

无论怎么样,大哥虽然走了,可是问题还得解决啊,因而,就出现了以下解决方案:uft-8,utf-16,utf-32这些编码方案。utf-16是用两个字节来编码全部的字符,utf-32则选择用4个字节来编码。下面只讲一下utf-8这种解决方案,由于它用的最多,用得最可能是由于在当时它的方案最好,最节省资源。

  • utf-8

utf-8为了节省资源,采用变长编码,编码长度从1个字节到6个字节不等

 
utf-8.png
  • 我知道你想说,明明看起来utf-16更加节省资源,节省空间,正常人都看得出来。但实际上,当时,互联网上绝大部分存在的资源都是英文的,英文在utf-16中也是2个字节,而在utf-8中则是1个字节。在当时,显然是utf-8更加节省资源。如今咱们在中文世界里来比较他们,则是utf-16更加节省资源。

OK,关于unicode和utf-8的区别已经解释完毕了。下面用一个图来巩固一下那些区别

 
                                                                                  Unicode与uft-8的结构关系.png
相关文章
相关标签/搜索