字符编码 字符编码 python2与python3解释器编码的区别

写文本的流程

  1. 在记事本中按下键盘按键j
  2. 记事本和操作系统交互,把按下的按键j的指令转化成0和1
  3. 操作系统发送指令给CPU
  4. CPU把0和1的指令转化为j
  5. 显示器显示j

这期间发生的字符与0和1之间的转化过程称为:字符编码

存 : j -> 0和1

取 : 0和1 -> j

存和取统称为字符编码

python解释器的原理

  1. 启动python解释器,python解释器相当于一个文本编辑器
  2. 打开文件,读取文件内容,python解释器相当于一个文本编辑器,此时发生了字符编码
  3. pytho解释器解释文件内容的语法,此时发生了字符编码

python解释器和文本编辑器的区别

  1. 相同点:都从硬盘中读取数据到内存中并显示
  2. 不同点:python解释器会多执行解释的步骤

字符编码发生的三个阶段

  1. 存:内存到硬盘
  2. 取:硬盘到内存
  3. 解释器解释语法

ASCII表

8位二进制数作为一个表与英文字符一一对应

中文表为GB2312或称为GBK

内存中编码格式统一位unicode(unicode是各国通用的编码)

从内存到硬盘的过程:unicode-->gbk称为编码encode

从硬盘到内存的过程:gbk-->unicode称为解码decode

存码时用什么编码,取的时候就用什么编码,不然会出现乱码

python2与python3解释器编码的区别

python2:

在python2解释语法的时候,生成变量时会把这个字符读进内存,这个时候有两种情况,一种是str编码,一种是unicode编码

str

直接编码成gbk的行式

unicode

直接编码成unicode的形式

python3

举例:x = '上'

unicode 10101010110101011010101101010

x = 10101010110101011010101101010

print(10101010110101011010101101010)

当打印的时候,解释器会自动把'上'的unicode编码10101010110101011010101101010转成终端编码

pycharm右下角控制的是写入的代码字符以什么编码格式保存,在代码开头输入#coding:utf-8控制的是python3作为文本编辑器的时候以什么编码格式读取文本内容,python3默认以utf-8行式读取字符

python解释器解释语法

unicode形式:解释定义变量的语法时,会开辟一块内存空间放入这个变量,然后这个变量在python3中以unicode的形式储存

utf-8形式:解释定义变量的语法时,会开辟一块内存空间放入这个变量,然后这个变量在python3中以utf-8的形式储存,但如果终端的编码为GBK就无法识别utf-8的编码

总结:新开辟的空间放入变量的时候,使用unicode转换,这样终端无论是什么形式的编码格式,都能够识别并打印