字符编码
字符编码
前置知识
1、程序执行的三大核心硬件:CPU、内存、硬盘
2、正常执行一个程序流程:
1、将硬盘中数据读取到内存
2、CPU从内存中读取数据,执行
3、软件运行中产生的数据优先存到内存,若要永久保存,则需由内存写入硬盘
3、python解释器执行一个py文件过程
1、启动python解释器
2、将py文件从硬盘读到内存
3、python解释器从内存中读py文件
4、识别py文件中python语法,执行相应操作
字符编码
字符:世界上一切语言、文字
文件的输入和输出是两个过程
人类输入的内容都是人类自己可以识别的字符,计算机只能识别0101010二进制字符
将人类的字符,存入内存和硬盘,要经历一个过程:
***人类的字符 >>>>>>> (字符编码表) >>>> 计算机二进制
发展史
1.一家独大
美国,ASCII码,一个英文对应一个bytes,一个bytes等于八个bit(二进制字节)
2.天下三分
各国拥有自己本国语言的编码表
中国 ,GBK,一个英文对应一个bytes,一个中文对应2个bytes
日本,shift......
3、分久必合
(万国码)unicode
为了兼容所有的国家的字符,生成unicode,所有的字符都用2bytes
1、占用存储空间
2、io次数增加,程序运行速度变慢(最致命)
utf-8
在unicode二进制数据存入硬盘的时候,做了优化
utf-8:
utf-8只与unicode有对应关系
unicode transformation format
所有的英文字符用1个bytes表示
所有的中文字符用3个bytes表示
现在的计算机:
内存都是:unicode
硬盘都是:utf-8
内存和硬盘兼容unicode:
1、无论存入什么字符到内存,unicode都可以兼容
2、硬盘中无论是什么编码文件,读到内存中,都可以兼容unicode
数据的传输:
优先以自己本国的字符编码进行传递
内存、硬盘的编码转换:
(内存)unicode二进制字符 >>> 编码(encode) >>> (硬盘)utf-8二进制字符
(硬盘)utf-8二进制字符 >>> 解码(decode) >>> (内存)unicode二进制字符
保证不乱码的核心:
用什么字符编码存,用什么字符编码取
文件头:
coding : utf-8
python2 :
默认的字符编码ASCII码(因为当时的unicode还没盛行),所以pycharm写的代码都是utf-8的在python2中一定要写文件头
python3:
默认的字符编码utf-8
pycharm默认的字符编码是:utf-8
中文Windows系统默认的字符编码是:GBK