utf-8和Unicode的区别
utf-8和Unicode到底有什么区别?是存储⽅式不同?编码⽅式不同?它们看起来似乎很相似,但是实际上他们并不是同⼀个层次的概念
要想先讲清楚他们的区别,⾸先应该讲讲Unicode的来由。
众所周知,在盘古开天辟地之前,sorry ,⾛错⽚场了(⊙o⊙)…在计算机发明的时候 ,由于计算机你只能表⽰⼆进制的数据,美帝⼈民为了交流通信⽅便,约定了⼀个编码系统,就是ASCII码,把!@#...等字符分别和0,1,2,对应,发现差不多刚好128个数,半个字节的长度,为了防⽌以后需要为新的符号编码,于是⼲脆取⼀个字节,最⾼位置为0。后七位从0-127分别对每⼀个符号编码。
于是,计算机每次读取⼀个字节,然后参照ASCII表把这些编码翻译成字符。美国⼈民很⾼兴,拿着⾃⼰玩去了.......
后来欧洲⼈也玩计算机,发现不⾏啊,还有很多符号(法语,德语)ASCII没办法表⽰啊,于是欧洲⼈⾃⼰也撸了⼀套编码,⼀个字节的长度,把最⾼位也⽤掉了。这套编码叫ISO。
和ASCII表类似,计算机也是每次只读⼀个字节,然后按照ISO表,解码出字符。于是欧洲⼈民也很⾼兴。
中国⼈不⾼兴了,特么我们汉字有⼏万个,常⽤的就有⼏千个,没有两个字节根本交不了货。于是勤劳勇敢的中国⼈民就破天荒的⽤了两个字节来表⽰中⽂。整出⼀套GBK。为了现实我中华民族兼容并蓄,我们兼容了ASCII编码。
gbk编码规定,计算机不能在每次都只读⼀个字节那么死板了,你要先看看第⼀位是不是为0,要是为0 的话,就当作ASCII码来读⼊⼀个字节,不然的话就读⼊两个字节。
计算机 : WTF ?? !!
于是天下就很乱了,欧洲⼈看不懂我们发过去的信息,我们也看不懂他们的东西,美国⼈看不懂我的东西,不过我们能看懂他们的信息。。。哈哈。
总之,天下⼤乱,雄并起,百姓⽣灵涂........
这个时候,就有个国际组织站出来了,说,这么着吧,我来撸⼀套编码,把⼤家的编码都归纳进来。于是unicode编码就出现了。这套编码表的编号从0⼀直算到了100多万(三个字节)。每⼀个区间都对应着⼀种语⾔的编码。⽬前⼏乎收纳了全世界⼤部分的字符。所有的字符都有唯⼀的编号,这就解决了解码的冲突,于是天下⼤定!但是,unicode把⼤家都归纳进来,却没有为编码的⼆进制传输和⼆进制解码做出规定。只留下⼀句:⼤哥只能帮你到这⾥了。
我知道你⼀定在想,要个⽑的规定啊,每次让计算机读取三个字节然后参照Unicode表解码就好了。想法是好的,但是如果类似于1号编码这样的⼩数据编号也要三个字节的话,那么也就是0x000001,这简直就是浪费啊,明明⼀个字节就可以表⽰了,你⾮得整三个,所以你到底是⼏个意思呢?
不管怎么样,⼤哥虽然⾛了,但是问题还得解决啊,于是,就出现了如下解决⽅案:uft-8,utf-16,utf-32这些编码⽅案。utf-16是⽤两个字节来编码所有的字符,utf-32则选择⽤4个字节来编码。下⾯只讲⼀下utf-8这种解决⽅案,因为它⽤的最多,⽤得最多是因为在当时它的⽅案最好,最节省资源。
utf-8
unicode码和ascii码区别utf-8为了节省资源,采⽤变长编码,编码长度从1个字节到6个字节不等
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论