day08-字符编码

计算机基础

启动应用程序

  1. 双击qq
  2. 操作系统接受指令,然后把该操作转化为0和1发送给CPU
  3. CPU接受指令然后把指令发送给内存
  4. 内存接受指令把指令发送给硬盘获取数据
  5. qq在内存中运行

写文本的流程

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

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

Python解释器执行文件的原理

  1. 启动Python解释器,python解释器就相当于一个文本编辑器
  2. 打开文件读取文件的内容,从硬盘上将文件内容读入到内存中
  3. Python解释器解释内存中的代码,然后才有了python语法的概念

Python解释器与文本编辑器的区别

  • 相同点:都是把硬盘中存着的数据读入到内存中,并显示
  • 不同点:文本编辑器将文件内容读入到内存后,是为了显示或者编辑,而python解释器还会多执行解释的步骤

字符编码

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

  1. 存:从内存到硬盘
  2. 取:从硬盘到内存
  3. python解释器器解释

字符编码发展史与分类

由于计算机是由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用8位来表示(一个字节),即:2**8=256。所以,ASCII码最多只能表示256个符号

但是在处理数据时,不同的国家有不同的语言,所以中国人规定了自己的标准gb2312编码,规定了包含中文在内的字符与数字的对应关系。日本人也会在自己的程序中加入日文。

但是用多国语言编写的文档该用那种编码格式呢?都会出现乱码现象。所以迫切需要一个世界的标准(能包含全世界的语言)于是Unicode应运而生

但是发现unicode编码太浪费内存了,所以做出了一套精简的utf8编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。utf8的出现只是为了节省空间

总结

  1. 因此为避免乱码现象,在存的时候用什么编码,取得时候用什么编码
  2. 在内存中的编码格式统一都是unicode
  3. 从内存到硬盘存入的过程,即unicode --> gbk 称为 编码 encode
  4. 从硬盘到内存读取的过程,即gbk --> unicode 称为 解码 decode

Python2与Python3解释器编码的区别

Python2解释器(了解)

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

  • str编码:直接编码成gbk的形式
  • unicode编码:直接编码成unicode的形式

Python3解释器

Python3中都是Unicode编码的

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

所以新开辟空间放入变量的时候,就用unicode转换,则终端无论是什么形式的编码格式,都能够识别并打印.

posted @ 2019-05-27 19:55  Never&say&die  阅读(135)  评论(0编辑  收藏  举报