day02-03 字符编码
文本编辑器打开原理
打开编辑器后操作系统后台启动一个进程,所编辑的文字存放在内存。若期间断电,则数据丢失。若做了保存,则将编辑文字从内存刷到硬盘上。
计算机只认二进制,为什么人通过编辑器编辑文字,计算机能够识别呢?
当打开编辑器后编辑文字,文字通过字符编码翻译成了计算机可识别的二进制存放于内存。反之人阅读文字,是将内存中的二进制流通过字符编码翻译成人可识别的文字。
假若此二进制流用其他字符编码翻译,这是乱码的由来。
字符编码发展史
早先美国发明了ASCLL编码,计算机可以将英文翻译成二进制流。但中文,日文等其他文字认不了,于是各个国家先后出GBK编码,Shift_JIS编码等。于是乎全世界多出了
太多字符编码。
为了统一起来,出现了unicode编码。常见一个字符2字节,生僻字4字节。
新的问题出现了,unicode编码全篇英文占用过多空间且网络传输数据量大,于是可变长的uft-8编码出现。于是英文1个字节,汉字3字节,生僻字6字节,大幅优化了。
字符编码在内存中以及在硬盘上的表现形式
当前内存中编码固定是unicode,只有硬盘的上字符编码可以更改。硬盘一般不用unicode编码,因为太吃空间,浪费IO,降低程序效率。所以硬盘一般为字符编码utf-8(用1Bytes存英文,3Bytes存中文)。内存中用unicode可以兼容万国软件,因为unicode有针对各国软件字符编码的各种映射关系。现在常见情况下硬盘上的字符读取进内存时,需要将utf-8转成unicode。以下为对应硬盘--字符集--内存关系。
unicode----->encode-------->utf-8
utf-8-------->decode---------->unicode