大学时期就很好奇,我们所看到的文字在电脑里面是怎么记忆的,感觉不可能是文字本身,今天刚好学习java的io流知识,顺便补充了一下电脑编码知识,先看一下下面小王和小张的例子,然后思考电脑怎么存放文字? 电脑是怎么识别文字的?
在显示器上看见的文字、图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片。假设,你用显微镜把盘片放大,会看见盘片表面凹凸不平,凸起的地方被磁化,凹的地方是没有被磁化;凸起的地方代表数字1,凹的地方代表数字0。硬盘只能用0和1来表示所有文字、图片等信息。那么字母”A”在硬盘上是如何存储的呢?可能小张计算机存储字母”A”是1100001,而小王存储字母”A”是11000010,这样双方交换信息时就会误解。比如小张把1100001发送给小王,小王并不认为1100001是字母”A”,可能认为这是字母”X”,于是小王在用记事本访问存储在硬盘上的1100001时,在屏幕上显示的就是字母”X”。也就是说,小张和小王使用了不同的编码表。小张用的编码表是ASCII,ASCII编码表把26个字母都一一的对应到2进制1和0上;小王用的编码表可能是EBCDIC,只不过EBCDIC编码与ASCII编码中的字母和01的对应关系不同。一般地说,开放的操作系统(LINUX 、WINDOWS等)采用ASCII 编码,而大型主机系统(MVS 、OS/390等)采用EBCDIC 编码。在发送数据给对方前,需要事先告知对方自己所使用的编码,或者通过转码,使不同编码方案的两个系统可沟通自如。
看了上面例子,大家都知道了电脑怎么存放文字了,就是用0和1存储的,也知道了为什么会产生编码并且电脑是怎么识别文字的
说白了,编码就是一个规矩规则,什么规则呢?就是我们文字都是存放在计算机是以01010101等记录信息的,文字也一样,那么就有一种规则让计算机知道01010101表示什么,00001111表示什么,于是,在美国,貌似1963年就提出了ASCII编码,后来由于各种原因,例如 ASCII不能表示汉字等,所以各个国家都有自己的编码,中国弄了gbk等
那编码有什么要注意的吗?就是经常运到的编码问题,为什么会产生编码问题呢,其实很简单,例如 utf-8 规定说: 01010101 10101010 11110000 表示 “你” 这个汉字,被拷贝到了gbk那里,那边是两个两个识别的,所以 1110000 就会出现乱码,不符合gbk的规则
有一个有趣的事情,就是你在电脑上面,创建一个txt文件,里面输入"联通" 保存, 然后再打开,会发现乱码,为什么会这样呢,参考一下 https://blog.****.net/hherima/article/details/39548551吧 https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81/8446880更深入学习吧