1.计算机基础知识node
2.电脑存放组成:python
硬盘 - 内存 -(二级缓存、一级缓存、cpu寄存器)- cpu
# cpu交互的是用户能识别的数据:字符
# 硬盘中最终存储的数据:0,1的二进制数据(能够直接转化为电脑能识别的高低电频)
3.文本编辑器存取文件的原理(nodepad++,pycharm,word)
#一、打开编辑器就打开了启动了一个进程,是在内存中的,因此,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失 #二、要想永久保存,须要点击保存按钮:编辑器把内存的数据刷到了硬盘上。 #三、在咱们编写一个py文件(没有执行),跟编写其余文件没有任何区别,都只是在编写一堆字符而已
4.python解释器执行py文件的原理 ,例如python test.py编程
#第一阶段:python解释器启动,此时就至关于启动了一个文本编辑器 #第二阶段:python解释器至关于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性,决定了解释器只关心文件内容,不关心文件后缀名) #第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码( ps:在该阶段,即真正执行代码时,才会识别python的语法,执行文件内代码,当执行到name="egon"时,会开辟内存空间存放字符串"egon")
5.总结python解释器与文件本编辑的异同缓存
#一、相同点:python解释器是解释执行文件内容的,于是python解释器具有读py文件的功能,这一点与文本编辑器同样 #二、不一样点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会python的语法,而python解释器将文件内容读入内存后,可不是为了给你瞅一眼python代码写的啥,而是为了执行python代码、会识别python语法。
1. 什么是字符编码网络
计算机要想工做必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),关于磁盘的磁特性也是一样的道理。结论:计算机只认识数字 很明显,咱们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符? 必须通过一个过程: #字符--------(翻译过程)------->数字 #这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码
# 字符编码:将人识别的字符转换计算机能识别的01,转换的规则就是字符编码表
2.涉及到字符编码的问题编程语言
#一、一个python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(python文件并未执行,前两个阶段均属于该范畴) #二、python中的数据类型字符串是由一串字符组成的(python文件执行时,即第三个阶段)
3.字符编码的发展史与分类编辑器
计算机由美国人发明,最先的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。ide
最多只能用 8 位来表示(一个字节),即:2**8 = 256,因此,ASCII码最多只能表示 256 个符号编码
固然咱们编程语言都用英文没问题,ASCII够用,可是在处理数据时,不一样的国家有不一样的语言,日本人会在本身的程序中加入日文,中国人会加入中文。spa
而要表示中文,单拿一个字节表表示一个汉子,是不可能表达完的(连小学生都认识两千多个汉字),解决方法只有一个,就是一个字节用>8位2进制表明,位数越多,表明的变化就多,这样,就能够尽量多的表达出不通的汉字
因此中国人规定了本身的标准gb2312编码,规定了包含中文在内的字符->数字的对应关系。
日本人规定了本身的Shift_JIS编码
韩国人规定了本身的Euc-kr编码
# 最先期对应关系:ascii编码表 - 存放的是英文数字与机器二进制的对应关系 # 数字70对应ascii表,指向的是字母'F' print(chr(70)) # 'F' print(ord('f')) # 102 # 字符所占字节数 # 1字节 = 8个二进制位 00000000 ~ 11111111 256个数字 -128 ~ 127 # 中文 # GBK: 16个二进制位 15个0到15个1 # 兼容ascii,一个字母或数字占一个字节 # 2w多汉字,用两个字节进行存储 # 国际上交流: # 一条信息中,可能同时出现英文/中文/日文/韩文,将全部信息存储,且不乱码 # 万国编码表:unicode # unicode采用两个字节存放数据:utf-8,utf-16 # utf-8采用变长存储:1字节存放数字与英文,3字节存放汉字 # utf-16采用定长存储:均以2字节存放数字,英文,汉字 # 内存中用utf-16存取数据:定长存取效率高(变长须要计算后才存取) # cpu中与硬盘中,采用utf-8存放数据(utf-8传输更快)
4.总结字符编码的发展可分为三个阶段
#阶段一:现代计算机起源于美国,最先诞生也是基于英文考虑的ASCII ASCII:一个Bytes表明一个字符(英文字符/键盘上的全部其余字符),1Bytes=8bit,8bit能够表示0-2**8-1种变化,便可以表示256个字符 ASCII最初只用了后七位,127个数字,已经彻底可以表明键盘上全部的字符了(英文字符/键盘的全部其余字符),后来为了将拉丁文也编码进了ASCII表,将最高位也占用了 #阶段二:为了知足中文和英文,中国人定制了GBK GBK:2Bytes表明一个中文字符,1Bytes表示一个英文字符 为了知足其余国家,各个国家纷纷定制了本身的编码 日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里 #阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。如何解决这个问题呢???#一、可以兼容万国字符 #二、与全世界全部的字符编码都有映射关系,这样就能够转换成任意国家的字符编码 # 总结:内存中统一采用unicode,浪费空间来换取能够转换成任意编码(不乱码),硬盘能够采用各类编码,如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提升传输效率与稳定性。
6.字符编码总结
# 一、但凡出现乱码问题,必定是编码时用了一套字符编码,解码时用了另外一套字符编码 # 二、解决乱码问题核心:编码时用什么编码存,解码时就用什么编码解 # 三、python3解释器默认使用utf-8 Python2解释器默认使用ASCII # 四、文件开头:#coding:gbk 用来告诉解释器读文件内容时,用什么编码 # 五、Python3中str类型内存用的是Unicode编码的二级制
# 原文本字符串数据 # s1 = 'abc123你好' s1 = u'abc123你好' print(s1) # 二进制字符串数据: 数据传输是以字节为单位,要将原文字符串转换为二进制字符串机械能传输 # 编码 res = s1.encode('utf-8') print(res) # 解码 s2 = res.decode('utf-8') print(s2) ss2 = b'abc123\xe4\xbd\xa0\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xa5\xbd' print('>>', ss2.decode('utf-8')) # 原义字符串数据 s3 = r'你好\n好的' print(s3) # s4 = 'D:\\nbpython\\day03\\代码\\4.三种字符串.py' # print(s4) s4 = r'D:\nbpython\day03\代码\4.三种字符串.py' print(s4)