day-08
1. 字符编码
-
什么是字符编码
将人类的字符编码成计算机能识别的数字,这种转换必须遵循一套固定的标准,该标准无非是人类字符与数字的对应关系。
2. 文本编辑器存储信息的过程
- 写文本:此时写的内容是保存在内存中,断电后会消失
- 点击保存:编辑器把内存中的数据刷到了硬盘上,永久保存
3. 字符编码发展史
最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。但是这种编码只有使用英语的国家才可以使用。但是处理数据时,各个国家有各个国家的语言,所以各个国家都给自己的语言编写以一套字符编码。所以中国人规定了自己的标准gb2312编码,规定了包含中文在内的字符与数字的对应关系;日本人规定了自己的Shift_JIS编码;韩国人规定了自己的Euc-kr编码……
此刻的各种标准都只是规定了自己国家的文字在内的字符跟数字的对应关系,如果单纯采用一种国家的编码格式,那么其余国家语言的文字在解析时就会出现乱码。所以能包含全世界的语言Unicode编码迫切应运而生。
此后Unicode编码方式成为世界标准。但是用Unicode会比ascii耗费多一倍的空间,在存储和传输上十分的低效。所以又出现了把Unicode编码转化为“可变长编码”的UTF-8编码(Unicode Transformation Format-8)。
由于UTF-8只是简化了代码的存储,它并不能与其他国家硬盘中的代码进行关系转换,因此内存中必须使用Unicode的编码,UTF-8的代码无法进行该操作。
内存中还使用Unicode编码,是因为历史遗留问题造成的,但是因为现在写代码使用的都是UTF-8代码,所以以后内存中的代码都将变成UTF-8代码,并且以前遗留的各个国家的代码都将被淘汰,所以未来内存中使用的编码也将使用UTF-8编码替代Unicode编码。
4. python解释器(文本编辑器)解释python代码的流程
-
python解释器相当于文本编辑器,把代码读入python解释器(python2默认是ASCII,python3默认UTF-8)
例如
中文 # gbk编码的中文加
-
识别代码,检查 python 语法
# coding:gbk # 告诉python解释器用gbk去完成第一步,读入字符 中文
-
产生结果,在终端进行显示(电脑是什么编码,就按照什么编码方式显示)
**代码出了编码错误,首先加
coding:utf-8
**
5. python2和python3编码的区别
终端的特性:电脑是什么编码方式,就按照什么编码方式显示信息。
5.1 python2
-
python2有两种存储变量的形式
-
Unicode
-
按照coding头
-
假设python2用utf8存储
x='中文'
,当print(x)
的时候,终端接收gbk的变量x,但是Windows终端编码是UTF-8,会乱码 -
假设python2用Unicode存储,终端接收的是Unicode,Windows终端编码是可以是任意编码方式,所以肯定不会乱码
# coding:gbk lt1 = '中文' # utf存储的 # lt1 = ['中文'] # []让他不用终端的编码转化,显示01010101001 print lt1 # ['\xe4\xb8\xad\xe6\x96\x87'] lt2 = u'中文' # u'中文'让他变成Unicode # 早期用python2定义中文,必须得加上u,让他变成Unicode存储 # lt2 = [u'中文'] print lt2 # '中文'
-
-
5.2 python3
-
python3只有一种存储变量的形式:Unicode
-
python3用unicode存储,终端接收的是Unicode,Windows终端编码是可以是任意编码方式,所以肯定不会乱码
lt1 = '中文' # == u'中文' print(lt1)
-