字符编码
一、前置知识
1、三大核心硬件
所有软件都是运行硬件上的,运行软件相关的三大核心硬件为:CPU、内存、硬盘
⑴软件运行前,代码及其相关数据是存放于硬盘中的
⑵任何软件启动都是将数据从硬盘读入内存,然后cpu从内存中取出指令并执行
⑶软件运行过程中产生的数据最先都是存放于内存中的,若想永久保存产生的数据,则需要将数据由内存写入硬盘
2、文本编辑器读取文件内容
⑴启动一个文件编辑器
⑵文件编辑器会将文件内容从硬盘读入内存
⑶文本编辑器会将刚刚读入内存的内容显示到屏幕上
3、python解释器执行文件
⑴启动python解释器,相当于启动一个文本编辑器
⑵从硬盘将文件内容读取到内存中
⑶python解释器执行刚刚读入内存的内容,开始识别python语法
二、字符编码
1、什么是字符编码
人类与计算机用的都是人类能懂得语言,而计算机只能识别二进制数,要想计算机能识别字符,必须经历一个翻译过程,翻译后的字符与数字一一对应。字符编码中编码就是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字
2、字符编码发展
⑴、ASCII码
现代计算机起源于美国,所以一开始仅仅是让计算机识别英文字符,于是诞生ASCII码
特点:
只有英文字符与数字一一对应关系
一个英文字符由8bit,即1byte表示,最多包含256个数字
⑵各国制定
中国制定GBK来识别中文和英文字符,日本制定shift_jis,等等
⑶Unicode
想让各种编码全部正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有映射/转换关系,这就是Unicode特点
3、编码与解码
编码:encode
由字符转换成内存中的Unicode,以及由Unicode转换成其他编码的过程,都称为编码
解码:decode
由内存中的Unicode转换成字符,以及其他编码转换成Unicode的过程,都称为解码
4、utf-8
Unicode因为是使用固定的两个字节长度存储,如果多国字符中有大量因为字符,使用Unicode会额外占用一倍空间,最致命的是io次数增加,程序运行速度变慢,所以需要将Unicode转化成另外一种精简的格式,这就是utf-8
utf-8是不定长的:一个英文字符占1个字节,中文占3字节,生僻字占更多字节
现在计算机都是内存用Unicode编码,硬盘用utf-8编码
三、小结
1、用户无论输入什么字符,存入内存,unicode都可以兼容
2、硬盘中无论是什么编码的文件,读到内存,都可以兼容unicode
数据的传输:
优先以自己的本国字符编码进行传递
(内存)unicode二进制字符 >>> 编码(encode) >>> (硬盘)utf-8二进制字符
(硬盘)utf-8二进制字符 >>> 解码(decode) >>> (内存)unicode二进制字符
保证不乱码核心:
用什么编码存的数据,就用什么编码取
python2 :
默认的字符编码ascii码
python3:
默认的字符编码utf-8
文件头:
coding:utf-8
pycharm默认的字符编码是:utf-8;windows操作系统默认字符编码:gbk