一、知识储备1、三大核心硬件——CPU,内存,硬盘所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘
2、文本编辑器读取文件内容的流程
3、Python解释器执行文件的流程以python test.py为例,执行流程如下:
4、总结—Python解释器&文本编辑器的异同
二、字符编码1、什么是字符编码人类在与计算机交互时,用的都是人类能读懂的字符,如中文字符、英文字符、日文字符等 而计算机只能识别二进制数。 解释如下: 二进制数即由0和1组成的数字,例如 010010101010。 计算机是基于电工作的,电的特性即高低电平, 人类从逻辑层面将高电平对应为数字1,低电平对应为数字0, 这直接决定了计算机可以识别的是由0和1组成的数字
由人类的字符到计算机中的数字,必须经历一个过程: 翻译的过程必须参照一个特定的标准,该标准称之为字符编码表, 该表上存放的就是字符与数字一 一对应的关系。 字符编码中的编码指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字
2、字符编码表的发展史 (了解)
字符编码的发展经历了三个重要的阶段——
2.1 阶段一:一枝独秀——ASCII(american standard code for information interchange,美国信息交换标准代码)现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ascii表 ascii第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,共定义了128个字符。 # ascii表的特点: 1、只有英文字符与数字的一一对应关系 2、一个英文字符对应1bytes,1bytes=8bit,8bit最多包含256个数字, 可以对应256个字符,足够表示所有英文字符
2.2 阶段二:百花齐放,百家争鸣——GBK,Shift_JIS,Euc-kr为了让计算机能够识别中文和英文,中国人定制了GBK
每个国家都各自的字符,为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表:
此时—— 美国人用的计算机里使用字符编码标准是ascii、 中国人用的计算机里使用字符编码标准是gbk、 日本人用的计算机里使用字符编码标准是shift_jis,如下图所示: 文本编辑存取文件的原理如下: 文本文件内容全都为字符,无论存取都是涉及到字符编码问题 #1、存文本文件 人类通过文本编辑器输入的字符会被转化成ASCII格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的ASCII格式的二进制写入硬盘 #2、读文本文件 直接将硬盘中的ASCII格式的二进制读入内存,然后通过ASCII表反解成英文字符 不同国家的字符编码标准不同,只支持本国语言以及英文,但是若一台美国电脑想要存储日文文件,就无法识别,出现乱码。
2.3 阶段三:和谐统一 ——unicodeunicode码扩展自ascii字元集。是一个编码方案,unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节。unicode 码在全球范围的信息交换领域均有广泛的应用。 unicode于1990年开始研发,1994年正式公布,具备两大特点:
文本编辑器输入任何字符都是最先存在于内存中,使用的是unicode编码,存放于硬盘中, 则可以转换成任意其他编码,只要该编码可以支持相应的字符。
3、编码与解码3.1 由字符转换成内存中的unicode,以及由unicode转换成其他编码的过程,都称为编码encode
3.2 由内存中的unicode转换成字符,以及由其他编码转换成unicode的过程,都称为解码decode
在诸多文件类型中,只有文本文件的内存是由字符组成的,因而文本文件的存取也涉及到字符编码的问题
4、utf-8的由来如果保存到硬盘的是gbk格式二进制,当初用户输入的字符只能是中文或英文, 同理如果保存到硬盘的是shift_jis格式二进制,当初用户输入的字符只能是日文或英文 如果是多国字符混杂的文件,该用什么格式的二进制 存入硬盘呢?
理论上是可以将内存中unicode格式的二进制直接存放于硬盘中的,但有两大缺点—— =1=更费空间 由于unicode固定使用两个字节来存储一个字符,如果多国字符中包含大量的英文字符时,使用unicode格式存放会额外占用一倍空间(英文字符其实只需要用一个字节存放即可) =2=更耗时间 空间占用并不是最致命的问题,最致命地是当我们由内存写入硬盘时会额外耗费一倍的时间
所以将内存中的unicode二进制写入硬盘或者基于网络传输时必须将其转换成一种精简的格式, 这种格式即utf-8(全称unicode transformation format,即unicode的转换格式)
那为何在内存中不直接使用utf-8呢?
三、字符编码的应用前面一大串的铺垫,只为了解决这个问题——为了存取字符时不发生乱码问题
因此:
3.1 文本编辑器nodpad++存取文本文件文本编辑器存取的都是文本文件,而文本文件中包含的内容全为字符,所以存取文本文件都涉及到字符编码的问题。 3.2 python解释器执行文件
3.3 字符串encode编码与decode解码的使用
参考资料: https://zhuanlan.zhihu.com/p/108805502
|
|
来自: 文炳春秋 > 《Python资料》