字符编码

1.计算机基础:应用程序、操作系统、硬件

应用程序:任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作系统去操作硬件

  • 启动应用程序:
    • 双击qq
    • 操作系统接受指令然后把该操作转化为0和1发送给CPU
    • CPU接受指令然后把指令发送给内存
    • 内存接受指令把指令发送给硬盘获取数据
    • qq在内存中运行

2.文本编辑器存取文件的原理:

  • 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失。
  • 要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。
  • 在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。

3.写文本的流程:

  • 在记事本中按下键盘中j的时候
  • 记事本和操作系统交互,把这个按下j的指令转化为0和1
  • 操作系统发送给指令给CPU
  • CPU说把这个0和1的指令转化为j
  • 然后再由显示器显示

期间发生的转化过程我们称之为字符编码

j---->0和1 #存储

0和1--->j #取

统称为字符编码

4. 什么是字符编码?

​ 计算机只认识数字。

​ 但是,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在 文件内写了一堆字符)。

​ 让计算机读懂人类的字符,必须经过一个过程:

  • 字符 -------->翻译过程 ------->数字

​ 总而言之,字符编码是将人类的字符编码成计算机能识别的数字,这种转换必须遵循一套固定的标准,该标准无非是人类字符与数字的对应关系,称之为字符编码表。

5. 涉及到字符编码的两个场景

  1. 一个Python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(Python文件并未执行,前两个阶段均属于该范畴)。
  2. Python中的数据类型字符串是由一串字符组成的(Python文件执行时,即第三个阶段)。

6. 字符编码发生在哪三个阶段

  • 存: 内存到硬盘

  • 取: 硬盘到内存

  • Python3解释器解释

    最早我们的电脑只认识英文,256个足够用了,8位二进制位作为一个对应表,称之为ASCII表

7. 字符编码的发展史(utf8的由来):

  • 电脑是美国创造出来的,电脑只认识0和1,但是美国人想输入一个a字符进去,所以必须得建立一套字符编码,让0011100表示成a,建立一套ASCII码表

  • 但是其他国家也开始使用电脑了,ASCII码表不能满足需求了,所以各个国家建立了自己的字符编码表

  • 各个国家的码农都用自己国家的编码表写了各种各样的代码

  • 但是每个国家自己的编码表只适合自己用,别人用会报错

  • 研制出了Unicode,Unicode能认识所有国家的字符,可以使用Unicode的编码保存到硬盘中,但是Unicode的编码太浪费内存,最后做出了一套精简的utf8编码

    备注:上述说到的报错其实就是乱码

8. ding: utf-8 控制的是Python3作为文本编辑的时候以什么编码格式读取文本内容,python3默认是utf-8的形式读取字符

python解释器解释语法

解释定义变量的语法,会新开辟一块内存空间放入这个变量,然后假设这个变量在python3中以utf-8的形式存储,如字符x = '中',被python3解释后在内存中会变成x=000001101010.理论上print(x)相当于输出000001101010,但是这个000001101010对于程序员来讲看不懂,所以python3创始人龟叔做了这个操作-把000001101010编码按终端的编码格式输出编码后的结果,如.如果终端的编码为gbk,终端无法识别000001101010.所以新开辟空间放入变量的时候,就用unicode转换,则终端无论是什么形式的编码格式,都能够识别并打印.

9. 乱码分析:

首先明确概念

  • 文件从内存刷到硬盘的操作简称存文件
  • 文件从硬盘读到内存的操作简称读文件

乱码的两种情况:

  • 乱码一:存文件时就已经乱码
  • 乱码二:存文件时不乱码而读文件时乱码

存文件时用utf-8编码,保证兼容万国,不会乱码,而读文件时选择了错误的解码方式,比如gbk,则在读阶段发生乱码,读阶段发生乱码是可以解决的,选对正确的解码方式就ok了。

总结(掌握)

  1. 保证不乱码的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码。

  2. 内存中的编码格式统一都是unicode

    从内存到硬盘的过程,即Unicode--->encode(编码)----->gbk 称为编码;

    从硬盘到内存的过程,即gbk---->decode(解码)----->unicode称为解码

    pycharm 右下角控制的是你写入的代码字符以什么编码格式保存

  3. 在内存中写的所有字符,一视同仁,都是Unicode编码,比如我们打开编辑器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是Unicode转换成其他编码格式的过程了。简而言之,就是内存中固定使用的就是Uncidoe编码,我们唯一能改变的就是存储到硬盘时使用的编码。

字符编码应用之Python

1.Python解释器的原理:

  • 启动Python解释器,Python解释器相当于一个文本编辑器0000

  • 打开文件,读出文件的内容,Python解释器相当于一个文本编辑器。--->发生了字符编码name='jick'

  • Python解释器解释name='nick',然后才有语法的概念。--->发生了字符编码 0000

    0000000(硬盘中)----->name='nick'(内存)----->开辟一块内存空间---->00001010

2.Python解释器和文本编辑器的区别

  • 都能干什么:

    ​ 把硬盘中躺着的数据读入到内存中,并显示

  • 不同:

    ​ Python解释器还会多执行解释的步骤

3.python3

​ Python3中str都是Unicode编码的,所以Python3中的str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型。

​ 很重要的一点是:看到Python3中x.encode('gbk') 的结果xc9xcf正是Python2中的str类型的值,而在Python3是bytes类型,在Python2中则是str类型。

原文地址:https://www.cnblogs.com/gongjingyun123--/p/10932818.html