计算机如何存储数据
- 计算机只能识别二进制,故只能使用二进制存储数据。
- 由于二进制可以与目前主流的十进制进行相互转换,所以使用十进制转二进制的方式可以存储任一数字,但是没有办法存储符号以及文字。
编码集
- 由于没有办法直接存储文字符号,但是可以把图片转换为二进制存储,这样一来,只需要给每个图片上的文字进行一个唯一的编码,再吧这个编码集合到一起,每次需要一个文字或者符号的时候就直接通过该图片的编码进行查询,最终进行显示。
- 但是这种编码集有很多种,
ASCII
,UNICODE
,GBK
等等,其中目前最为主流并且最全的是UNICODE
,里面几乎涵盖了世界上绝大多数语言的文字,并且后续还会继续补充。
简化编码集
- 由于
UNICODE
较为庞大,所以存储空间也比其他编码集更大,一个英文字母a
在ASCII
只需要一个字节的存储空间,但是到了UNICODE
则需要两个字节进行存储,并且只会用到一个字节,剩下的一个字节全部为0,及其浪费资源(在那个年代)。 -
UTF-8
,UTF-16
等编码格式的产生使得上面的问题得以解决,比如,字母'a',在UTF-8
的编码下,可以做到只用两个字节去存储,并且需要读取字母'a'时,使用特定的算法可以成功读取到字母'a'的UNICODE
编码,这极大地节省了内存空间。
结束
至此,从小开始困惑我的乱码问题得以解决,乱码问题的产生,无非就是编码集的不一样,比如在ASCII
下,我不管用输入法写了多少汉字,都没办法显示一个汉字,而我在GBK
下,所记录的汉字,换在UNICODE
下,肯定没办法正常显示,因为他们两个在内存里面所存储的二进制大小就不一致,这就有点像Map
里面的key-value
一样,你的key
不一致,怎么能取得出来相同的value
呢?。