编码懵懂
计算机只识别二进制,为什么我们能看到汉字、英文和其他字符? 这少不了编码的作用。编码众多不一一列举,网上很多。
为什么要写这篇文章,就是没彻底理解编码过程,网上好多解释很全,都是逻辑上的解释编码和解码是什么东西,当然这些必须了解。但对于一名程序员,处理编码的时候还是力不从心,为什么?就是知道什么是编码,却没搞懂编码的具体变化过程。
彻底搞懂编码
编码的过程很好理解,好多文章没说到点子上,因为有个过程忽略掉了。
读过程
硬盘有文件,文件是按照二进制存储的,然而各种编码后的都是二进制,是有区别的,比如
1.文件a.txt在硬盘上,它的编码是’utf-8’,也就是文件里面的字符对应的二进制都是根据’utf-8’编码规则排序的,不是’gbk’规则排序,也不是其他编码规则,就像汉字“五”代表5,罗马字母“V”代表5,汉字“五”和罗马字母“V”并不是同一种东西;
2.情况一.若内存只允许识别和存储Unicode编码,那么读取硬盘上的a.txt文件到内存,需要将utf-8转为Unicode编码,好比汉字“五”转换成数字5,(这个过程个问题怎么识别文件a.txt的编码的?即怎么识别“五”是汉字,我没想明白系统怎么处理的,或许文件有自带编码标识,这样也能讲得通);情况二.若内存可以识别并存储任何编码,那么,从硬盘上获取的的文件将原封不动是搬过来,不做任何处理;
3.编辑器要将内容展示给人看 ,把内存中的文件a.txt中的内容通过定义好的编码,显示出来,比如编辑器页面编码是’utf-8’,无论内存中任何一种情况都不会乱码,直接显示正常。若编辑器页面是’gbk’,在内存情况一中不会出现问题,但内存情况二中若编辑器没处理就会出现乱码。
写过程:
无论编辑器设定的什么编码,写的内容都存在内存中,也就是编辑器编译的时候回自动转换为unicode编码。
当出现保存到硬盘中的操作时,就会把内存的unicode编码内容转换成想要编码形式,比如你编辑器编码是gbk,存成uft-8文件,是没有问题的。只不过再次读取的时候或许有些问题,这些问题也可能会被编辑器自动处理。
特殊说明
解码是 非unicode 转换成unicode
编码是 一种编码(通常是unicode)转另外一种编码,条件是:若有直接转换机制(程序),直接转成另外一种编码,若没有先转换为unicode,然后通过unicode转换成另外一种编码。
这解释保留态度,有问题欢迎指责