字符编码
文件处理
前提知识:(复习)
所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘
具体流程:软件运行前,软件的代码及其相关数据都是存放于硬盘中的
任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令并执行
软件运行过程中产生的数据最先都是存放于内存中的,若想永久保存软件产生的数据,则需要将数据由内存写入硬盘
字符编码
人与计算机交互都是用的人能读懂的字符,而计算机只能识别二进制数,所以我们必须将字符转换为计算机的二进制数字,计算机才能运行。(计算机基于电工作,只识别0、1数字)
翻译转换的过程必须参照一个特定的标准,该标准称之为字符编码表,该表上存放的就是字符与数字一一对应的关系。
字符编码中的编码指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字
字符编码表发展史
①阶段一:ASCII表
ASCII (由美国制定的ASCII表只有英文字符和数字之间的对应关系,以此来相互转换)
# ASCII表的特点:
1、只有英文字符与数字的一一对应关系
2、一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含2^8即256个数字,可以对应256个字符,足够表示所有英文字符
②阶段二:各国开发各自的编码表
(中国)GBK表(只有中文、英文字符和数字之间的对应关系,以此来相互转换)
# GBK表的特点:
1、只有中文字符、英文字符与数字的一一对应关系
2、一个英文字符对应1Bytes,一个中文字符对应2Bytes
补充说明:
1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符GBK原理
(日本)Shift_JIS表:只有日文字符、英文字符与数字的一一对应关系
(韩国)Euc-kr表:只有韩文字符、英文字符与数字的一一对应关系
文本编辑器存取文件原理:(文本文件内容都为字符,所以无论存取都会涉及到字符编码问题)存文本文件:人类通过文本编辑器输入的字符会被转化成ASCII格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的ASCII格式的二进制写入硬盘
读文本文件:直接将硬盘中的ASCII格式的二进制读入内存,然后通过ASCII表反解成英文字符
③阶段三:Unicode(万国码),统一标准
unicode于1990年开始研发,1994年正式公布,具备两大特点:包含了所有语言中的所有字符与数字的一一对应关系,即兼容万国字符
与传统的字符编码的二进制数都有对应关系(解决过去编码的历史遗留问题)
文本编辑器输入任何字符都是最先存在于内存中,是unicode编码的,之后则可以转换成任意其他编码存放于硬盘中
编码与解码由字符转换成内存中的unicode,和由unicode转换成其他编码的过程,都称为编码encode
由内存中的unicode转换成字符,和由其他编码转换成unicode的过程,都称为解码decode编码解码
utf-8
如果保存到硬盘的是GBK格式二进制,那么当初用户输入的字符只能是中文或英文,但如果我们输入的字符中包含多国字符,就会有乱码
理论上是可以将内存中unicode格式的二进制直接存放于硬盘中的,就解决了多国字符的问题
直接使用Unicode的缺点:由于unicode固定使用两个字节来存储一个字符,如果多国字符中包含大量的英文字符时,使用unicode格式存放会额外占用一倍空间(英文字符其实只需要用一个字节存放即可),造成空间资源极大的浪费
更重要的是当我们由内存写入硬盘时会额外耗费一倍的时间
所以将内存中的unicode二进制写入硬盘或者基于网络传输时必须将其转换成一种精简的格式,这种格式即utf-8(全称Unicode Transformation Format,即unicode的转换格式)
在内存中不直接使用utf-8的原因(历史遗留问题以及性价比问题)
utf-8是针对Unicode的可变长度字符编码:一个英文字符占1Bytes,一个中文字符占3Bytes,生僻字用更多的Bytes存储,unicode如同一个过渡版本,我们新开发的软件或文件存入硬盘都采用utf-8格式,直至所有老编码的文件都淘汰掉之后,硬盘里放的就都是utf-8格式,此时就可以不再用unicode,内存里也直接改用utf-8。但是,实际上国内还是有很多使用 GBK 等编码的人,因为 UTF-8 等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。所以unicode也就会长期存在<