字符编码与文本基础

一.字符编码基础知识

 1.计算机硬件包括CPU、硬盘、内存,其中CPU负责从内存中读取指令并解码执行。

  操作系统和应用软件运行时都是先把程序加载到内存中,然后应用程序通过调用操作系统提供的接口,来间接实现硬件的使用。

    2.文本编辑器存储原理

  应用程序加载到内存中,先将编辑的内容存储在内存中,然后通过点击保存然后将文件刷到硬盘上,确保在断电后文件内容不丢失。

  3.python解释器执行python文件的原理

  第一阶段:python解释器启动,相当于开启了一个文本编辑器

  第二阶段:python解释器相当于文本编辑器,将python文件读到内存中(python解释器的特性决定了只关注文件的内容,不在意文件的后缀名)

  第三阶段:python解释器开始执行加载到内存中的代码(在执行时才会识别python的语法,比如识别到定义了一个变量,会在内存中开辟一个新的空间来存放变量。)

  python解释器之余文件编辑器的异同:

  相同:python解释器和文件编辑器一样,都有读取文件的功能

  不同:文件编辑器读入内存是为了显示,而python解释器是为了执行(识别python语法)

二.什么是字符编码

  计算机在通电时才能工作,而计算机只认识数字(高频和低频对应二进制中的数字1和0)。

  由于人们在进行交流时都是通过一连串字符来传达意思的,为了能让计算机为人们服务,这就需要这么一个过程:

  字符------->翻译--------->数字(一个字符如何对应一个或一串特定的数字)

  以下两个场景下涉及到字符编码的问题:

  1. 一个python文件中的内容是由一堆字符组成的(python文件未执行时)

  2. python中的数据类型字符串是由一串字符组成的(python文件执行时)

三.字符编码的发展:

  英美:ASCII码,一个Bytes代表一个字符,1Bytes=8bit

  中文:GBK码,2Bytes代表一个字符

  为了方便各种语言之间的通信,出现了万国码:Unicode码(所有字符都是2Bytes),utf-8码(对英文字符只用1Bytes表示,对中文字符用3Bytes)

  注意:

  unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间大

  utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示   

  1.内存中使用的编码是Unicode码,采用用空间换时间的策略(所有程序都需要先加载到 内存中才能运行)

  2.硬盘中或者网络传输用utf-8,网络I/O或磁盘I/O延迟要远大于utf-8的转换延迟,而且I/0应该尽可能节省带宽,保证传输数据的稳定

四.字符编码的使用

  1.文本编辑器.编码转换:

  unicode----->encode-------->utf-8

  utf-8-------->decode---------->unicode

  

  2.乱码的原因

  第一个:在编码时已经乱码,比如文件内容中有中文和日文,而在往硬盘存储时编码格式是gbk,那么日文就没有与之匹配的对应关系,造成无法正确存储,也就是数据损坏。

  第二个:存文件时不乱码而读文件时乱码,比如选择了和存储时不一样的编码方式,比如gbk码存储,utf-8码读取

  总结:文件以什么编码保存,就以什么编码打开

五.程序的执行

  第一阶段:启动python解释器

  第二阶段:此时python文件解释器相当于文本编辑器,将硬盘中的文件读入到内存

  第三阶段:读取已经加载到内存中的代码(Unicode编码的二进制),然后执行,执行过程中可能会开辟新的内存空间

六.python2和python3的区别:

  1.在python2中有两种字符串类型:str和unicode

  2.在python3中也有两种字符串类型:str和Bytes

原文地址:https://www.cnblogs.com/sxh-myblogs/p/7230738.html