字符编码梳理

计算机基础

  1. cpu:控制程序的运行(从内存中取出文本编辑器的数据读入内存
  2. 内存:运行程序(经CPU操作后,内存中含有文本编辑器的数据)
  3. 硬盘:存储数据(文本编辑器)

文本编辑器存取文件的原理

  1. 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失。

  2. 要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。

  3. 在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。

  4. 作用:读写数据,保存数据

python解释器执行py文件的三个步骤

  • 第一阶段:Python解释器启动,此时就相当于启动了一个文本编辑器
  • 第二阶段:Python解释器相当于文本编辑器,从硬盘把test.py文件的内容存入内存,读取test.py中的内容(涉及字符编码)
  • 第三阶段:执行刚刚从硬盘中获取的内容(生成变量就开辟内存空间存放变量,存放变量存放到内存中,涉及一次字符编码)

python解释器与文本编辑的异同

  • 相同点:Python解释器是解释执行文件内容的,因而Python解释器具备读py文件的功能,这一点与文本编辑器一样。
  • 不同点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会Python的语法,而Python解释器将文件内容读入内存后,可不是为了给你瞅一眼Python代码写的啥,而是为了执行Python代码、会识别Python语法。

字符编码

字符编码就是二进制和你所能认识的字符之间的相互转换的一个过程

早期的时候我们硬盘中躺着gbk/utf8/ascii的文件,把硬盘中的文件调入内存中执行,由于编码格式不统一,无法读取.所以出现了unicode编码,他可以识别所有形势的编码,内存中以unicode的形势读取硬盘中的文件.用unic的形式把内存中的文件读入硬盘,但是unicode会占用更大的内存,所以吧unicode形势的代码继续转换成utf8形式的代码节省空间

乱码的两种情况

中文的文本编辑器只认识中文,然后你输入了日文-->乱码 #encode 编码

文本编辑器存储了中文(文件),但是你用日本编辑器打开这个文件-->乱码 #decode解码

解决乱码

什么格式存储,就什么格式读取,就不会乱码!

windows电脑的记事本默认为gbk编码,除此之外其他的软件默认编码为utf8

python3(了解)

你看到的其实是unicode

但是终端帮你把这个unicode的0和1做一个转换,从unicode转换成了终端能够识别的编码格式,然后变成中文

# coding:gbk
a = '中文'  # 用unicode编码存储了这堆0和1
print(a)  # 010101010

假设终端的默认编码是gbk , 认识 unicode编码的变量

假设终端的默认编码是utf8,认识 unicode编码的变量

Python2(了解)

unicode + 指定的coding编码(str类型)

# coding:gbk
a = '中文'  # 用gbk编码存储了这堆0和1
a = u'中文'  # 用unicode编码存储了这堆0和1
print(a)

终端是一个文本编辑器,会有默认编码.

假设终端的默认编码是gbk , 认识 gbk编码的变量

假设终端的默认编码是utf8, 不认识 gbk编码的变量

原文地址:https://www.cnblogs.com/aden668/p/11316186.html