我所理解的UTF-8和GBK

UTF-8&GBK


引用

UTF-8和GBK的区别_维-CSDN博客_gbk和utf-8
Unicode、UTF-8、UTF-16之间的区别_无籽西瓜吃吗的博客-CSDN博客_utf-16

正文

其实很多时候,这类转码的操作最主要的目的就是为了解决歧义的问题。
这类通用的编码的目的最主要是将语言转换为计算机能传输的01的形式。所以,理想的编码方式希望在获取字节流的同时,能直接进行解码生成对应的文字。
众所周知,计算机是洋鬼子发明的= =,所以最初的编码方式肯定是按照洋鬼子的喜好来,通过ASCII来进行编码。这种编码方式定义了洋鬼子常用的一些字母啊,数字啊之类的一些符号,生拼硬凑最后汇成了定义了128个字符编码的ASCII表。
[image:740A5567-1788-4A4E-AF7A-5DB99622048C-301-00003D578277E7EA/u=3480350023,487012241&fm=26&gp=0.jpg]

在这种情况下,世界上那么多个国家,那么多种文字,总不可能强迫别人都用英语来干一切活吧。所以,强如我大中华,一定要用我们自己的方式来突破洋鬼子的垄断,(华为加油!),GBK应运而生。就我所了解,GBK使用最高位01来标识当前字符是不是中文,如果是1,则采用当前和下一个字节来表示一个汉字,如果是0,则当前字符直接通过ASCII进行解码即可。这种方式可以算是取其精华去其糟粕,巧妙地通过ASCII最高位为0的特性,既保留了对于常规字符仅仅使用一个字节的便利和高效,又很好地将汉字加入到了编码中。这一点真的很符合中国一如既往的特性,中庸,没有那么强的侵略性,这也是为什么”那兔“里中国被比如成兔子。通过这种方式,能表示65536种情况的字符,基本上使用也足够了。
那UTF-8系列为什么会出现呢?因为世界上不仅仅只有中文国家还有英文国家。还有类似”第三世界领袖”这样拥有n种语言的“超级大国”。能不能希望有这样子一种官方的默认编码方式能很好地包容所有的语言呢?所以就出现了UTF系列。洋鬼子看见你有好东西,就是喜欢直接搞一套新的玩意,然后说自己有绝对的解释权。UTF-8的整体思路和GBK其实差不多,GBK是通过1个或者两个字节来表示一个字符,那么UTF-8就通过1-3个字节来表示一个字符。
那么怎么来区别到底是使用1个还是2个或者三个字节呢?如何解决歧义问题呢?还是通过读取一个字节开头的高位数据,如果是0则是1个字节,1为2个字节,11是三个字节。具体的识别逻辑和GBK差不多。
然后是UTF-16,这种编码方式统一采用2个字节来表示字符,所以也不用特地去识别字节的高位了,直接按字取字节输出就行了。通过这种编码来重新编码,原本用UTF-8编码的汉字量大的数据,可以省下1/3的数据传输量,因为在UTF-8的编码方式中,汉字可是占据了3个字节。
剩下的UTF-32什么的,就是对于以上编码方式的拓展,希望通过用更长的字节来表示更多的字符,仅此而已。

猜你喜欢

转载自blog.csdn.net/qq_31433709/article/details/107863756