day 08 小结

1.字符编码

1.1计算机基础

1.2 文本编辑器存取文件的原理

1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中,断电即消失

2.要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。

3.在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。

1.3 python解释器执行py文件的原理

  • 第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器
  • 第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中
  • 第三阶段:python解释器执行刚刚加载到内存中test.py的代码(ps:在该阶段,即真正执行代码时,才会识别python的语法,执行文件内代码,当执行name=“egon”时,会开辟内存空间存放字符串“egon”)。

1.4 python解释器与文本编辑的异同

相同点:python解释器是执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样。

不同点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不会理会python的语法,而python解释器将文件内容读入内存后,执行python代码、会识别python语法

1.5 字符编码介绍

1.什么是字符编码:

计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低平(人类从逻辑上将二进制1对应高电频,二进制数0对应低电频),关于磁盘的磁特性也是同样的道理。

结论:计算机只认识数字。

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

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

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

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

3.字符编码发展史与分类

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

# acill编码的转换关系的方法
print(chr(65))
print(ord('a'))

ascii编码 --》 美国人

日本人也造一种编码 --》Shift_JIS

韩国人也造一种编码 --》 Euc-kr

中国人也造一种编码 --》gb2312

这个时候就出现了unicode编码(一种对应关系)

unicode可以认识万国编码

硬盘中无论躺着什么格式的编码文件,unicode都可以识别,假设你看日本的片子,从硬盘中读取fuck编码,然后unicode识别,unicode帮你转换成gb2312,解决了乱码的问题,用unicode存

unicode存的时候多占用空间,所以出现了utf8(只和unicode一一对应)--》解决了unicode内存占用的问题

现在所有的电脑都是这样的 --》 内存中unicode取,存用utf8存(硬盘),全世界的人写代码/写文件都是用utf8

windows系统的记事本默认编码 是 gbk,除此之外都是utf8

用什么编码写,就用什么编码读

写用utf8,存用utf8,读用gbk--》乱码

写用utf8,存用gbk,--》乱码 ,读用 --》除非你找日文编码,放入中文 の(中文的一个符号,不是日文的“的”)

4.乱码分析

首先明确概念

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

乱码的两种情况:

  • 乱码一:存文件时就已经乱码

存文件时,由于文件内有各个国家的文字,我们单以shiftjis去存,
本质上其他国家的文字由于在shiftjis中没有找到对应关系而导致存储失败。但当我们硬要存的时候,编辑并不会报错(难道你的编码错误,编辑器这个软件就跟着崩溃了吗???),但毫无疑问,不能存而硬存,肯定是乱存了,即存文件阶段就已经发生乱码,而当我们用shiftjis打开文件时,日文可以正常显示,而中文则乱码了。

  • 乱码二:存文件时不乱码而读文件时乱码

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

2.python解释器(文本编辑器)解释python代码的流程

1.python解释器相当于文本编辑器,把代码读入python解释器 --》 字符编码 -》 python2默认是ascill,python3默认utf8 --》 上coding头

中文 # gbk编码的中文加

2.识别代码 --》print有意义 --》 语法问题

# coding:gbk  # 告诉python解释器用gbk去完成第一步,读入字符
中文

3.产生结果 --》 跑到终端--》字符编码

终端有一个特性:你的电脑是什么编码,就按照什么编码的来,windows终端是gbk

2.python2和python3的编码区别

1 python2

python2有两种存储变量的形式,第一种:unicode;第二种:按照coding头来的

假设python2用utf8存储x='中文',当你print(x)的时候,终端接收gbk的变量x,但是windows终端编码是utf8,会乱码

假设python2用unicode存储,终端接受的是unicode,windows终端编码是utf8还是gbk重要吗?不会乱码=

# coding:gbk
lt1 = '中文'  # utf存储的
# lt1 = ['中文']  # []让他不用终端的编码转化,显示01010101001
print lt1  # ['xe4xb8xadxe6x96x87']

lt2 = u'中文'  # u'中文'让他变成unicode  # 早期用python2定义中文,必须得加上u,让他变成unicode存储
# lt2 = [u'中文']
print lt2  # '中文'

2 python3

python3只有一种存储变量的形式,unicode

python3用unicode存储,终端接收的是unicode,widonws终端编码是utf还是gbk不重要,不会乱码

lt1 = '中文'  # == u'中文'
print(lt1)
原文地址:https://www.cnblogs.com/LZF-190903/p/11534902.html