大白话系列之——聊一聊各种编码表的由来ASCII、GB2312、GBK、Unicode、UTF-8等

大家考虑过一个问题:由于计算机只能识别二进制的数据,所以在计算机当中我们如果想要计算机来识别我们生活当中的文字,该怎么办?

我们是不是要做一些动作:用一些二进制,也就是用1和0的排列组合的变换形式来一 一对应我们生活中的文字

所以刚开始美国人就做了这么一件事,因为美国的文字是abcd这种的,但是计算机只能识别10100101这种二进制的数据

所以他们就搞了一个abcd等字母数字、键盘上的符号和二进制排列组合一 一映射的一张表,这就是ASCII码表,全称是

American Standard Code for Information Interchange:美国信息交换标准代码

比如在这张表里“a”这个字母对应的二进制是1100001,但是这个二进制是不是不太好看懂,但是它的十进制咱能看懂啊,所以它转换成十进制是97,然后和a一样,后边的bcdef等等所有键盘上能看到的字母、数字,符号在ASCII码表里都有对应的二进制,所以由于ASCII这张编码表的存在,计算机就能识别老美的文字了。

接下来,既然美国人已经能让计算机识别他们的文字了, 那我们中国人是不是也得想办法搞一张表来让咱们的汉字和计算机的二进制一 一对应起来啊,所以咱们中国就出了自己的码表,叫GB2312,这个表里收录了几千个常用汉字以及中文标点符号和二进制的映射,但是中文里的汉字还是很多的,所以后期对GB2312进行了扩容又形成了一张新的码表叫:GBK,GBK里收录的汉字就非常多了,至少有2万多;

接着呢,国际化标准组织就发现,美国、中国、日本、韩国等等,世界上很多国家都在搞自己的码表

国际化标准组织这哥们儿就说,咱能不能别搞那么多表,咱搞一张表,把美国、中国、日本、韩国等世界上全部的国家语言文字都搞进来不就好了吗?所以他们就搞了一张表,在这张表里对世界上所有国家的文字都进行了重新的编排,然后和二进制组合进行了一 一的对应,这张表就是Unicode码表,后期呢,又对这张码表进行了优化,形成了UTF-8码表

Unicode和UTF-8具体有什么区别呢?

在Unicode中无论你是什么字符,存储的时候都用两个字节来表示

但是有的时候用两个字节来存储会造成浪费,比如a 这个一个字符用2个字节来存就很浪费了。

所以UTF-8对这种情况进行了优化,根据存的内容来决定是用一个字节还是两个字节或者三个字节来存(UTF-8最多3个字节来存)

那么各个编码都占几个字节呢?

ASCII:1个字节

GB2312、GBK:2个字节

Unicode:2个字节

UTF-8:根据不同的文字而不同,英文1个字节,汉字3个字节

那为什么他们占的字节不同呢?

因为美国的字母数字加符号一共就那一百多个, 用一个字节8位的1、0排列组合就够用了

但是咱们中国的汉字太多了,一个字节8位的1、0排列组合根本不够,所以用了2个字节16位的排列组合来一 一对应

OK,上边就是自己对这些编码表的一些总结和理解,希望对大家有帮助

你可能感兴趣的:(Java开发总结,编码表,ASCII码表,GBK,UTF-8)