一:文本编辑器:
python 解释器的三步骤:
1.python解释器启动起来,放到内存里面。
2.python解释器,从硬盘读取一个文件,把文件的内容全都当成普通字符,先读到内存里面。
3.python解释器可以读一行就解释一行。
二:什么是字符编码?
答:计算机要想工作必须通电,也就是说”电“驱使计算机干活,而”电“的特性,就是高低平。
高电平:即 二进制数1. 低电平:即 二进制数0
也就是说 计算机只认识 数字。
三:计算机编码的三个阶段。
阶段一:
现代计算机起源于美国,最早诞生也是基于英文考虑的”ASCII”。
ASCII: 1 Bytes == 8bit
1KB==1024 Bytes
1MB==1024 KB
1GB== 1024MB
1TB==1024 GB
1GB= 1024*1024*1024
8bit 可以表示为256个字符。
阶段二:
为了满足中文,中国人定制了GBK。
GBK: 以2Bytes 代表一个字符。 不止中国,为了满足其他国家,
各个国家纷纷定制了自己的编码。
日本: Shift_Jis 韩国:Eus-kr
阶段三:
各国有各国的标准,就会有不可避免地出现冲突,结果就是,
在多语言混合的文本中,显示出来会有乱码。
于是产生了 unicode , 统一用了 2Bytes 代表一个字符。
它以 2**16-1 = 65535 可代表6万多个字符,因而兼容万国语言。
但是 对于都是英文文本而言,无疑多了一杯的存储空间。
于是 产生了 utf-8, 对英文字符只用1Bytes,中文字符3Bytes。
需要强调的是:
unicode: 简单粗暴,所有字符都是2Bytes,
优点是字符-》数字的转换速度快,缺点是占用空间大。
utf-8 : 精准, 对不同的字符用不同的长度表示。
优点是:节省空间 。
缺点是: 字符-》数字的转换速度慢,
因为每次都要计算出字符需要多长的Bytes才能够精准表示
1.内存中使用的编码是 unicode .
用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快)
2.硬盘中或者网络传输用 utf-8,
网路I/O延迟 或 磁盘I/O延迟要远大于utf-8的转换延迟,
而且 I/O 应该是尽可能的节省带宽,保证数据传输的稳定性。
用什么格式编码 就要 用什么格式解码。
读的过程 是 unicode.
执行的过程 识别代码,开辟空间,形成其他的格式编码。
字符编码的使用:
文本编辑器:
内存:用unicode 格式的二进制
↑ ↓
↑ ↓
读取文件:
decode 保存文件:
↑ encode
↑ ↓
硬盘:用utf-8格式的二进制
x = ‘钟’ :
换编码格式之后,没执行之前,并不会出现乱码。
执行后,会出现乱码报错,
1.python 2 默认的是 ASCII 字符串识别的代码:
1.str = bytes
2.'u'
unicode => encode(utf-8) 的结果bytes
unicode => decode(utf-8)===>unicode
2.python 3 默认文件编码的是 utf-8 字符串识别的代码 : unicode / bytes
为什么用bytes? 数据要想传输,一定要转成bytes。
第一步:python 解释器先执行,没问题
第二步:读取文件 有问题。
(读的时候并不知道编码格式是什么,只能用默认的,
这样一来就出错了)
打印到终端
一个程序 丢给 另一个程序。 一个内存空间到另外一个内存空间。
Windows 默认的编码是 GBK。