字符编码
字符编码是将人类的字符编码成计算机能识别的数字。
文本编辑器存储信息的过程
文本编辑器 --》 写文本 --》 存储信息
显示屏(内存) --》(转换)硬盘
#ASCII码的转换关系
print(chr(65))
print(ord('a'))
早期,每个国家都有自己国家的字符编码,每个国家也只能使用自己国家的计算机。
这个时候就出现了unicode编码,Unicode编码可以识别所有国家的编码
Unicode存储占用太多空间,所以出现了utf-8(和Unicode一一对应) 解决了Unicode内存占用的问题
一般现在的电脑都是内存中unicode取,存用utf8存。
为什么内存中不用utf8?
因为utf8和gb2312都没有转换关系,所有内存要用Unicode
gb2312和gbk的区别
gb2312 是中国早期的编码,其中为常用词
gbk 是后期完善的,包含了中文的所有字
用什么编码写,就用什么编码读,否则会出现乱码
编码和解码
unicode编码 ---》(编码) utf8 从内存到硬盘
utf8 --》(解码) unicode 从硬盘到内存
现在内存只有unicode编码
Python解释器(文本编辑器)解释Python代码的流程
1、python解释器相当于文本编辑器,先把代码读入python解释器--》字符编码》上coding头
2、识别代码-》print有意义--》语法问题
3、产生结果--》跑到终端--》字符编码
终端有一个特性:电脑是什么编码,就会按照什么编码来,Windows终端是gbk
Python2和Python3的编码区别
Python2
Python2有两种存储变量的形式,第一种:Unicode,第二种:按照coding头来。
Python2默认用ASCII读取字符。
假设python2用utf8存储x='中文'
,当你print(x)
的时候,终端接收gbk的变量x,但是windows终端编码是utf8,会乱码。
假设python2用unicode存储,终端接受的是unicode,windows终端编码不管是什么都不会乱码。
# coding:gbk
lt1 = '中文' # utf存储的
# lt1 = ['中文'] # []让他不用终端的编码转化,显示01010101001
print lt1 # ['xe4xb8xadxe6x96x87']
lt2 = u'中文' # u'中文'让他变成unicode # 早期用python2定义中文,必须得加上u,让他变成unicode存储
# lt2 = [u'中文']
print lt2 # '中文'
Python3
python3只有一种存储变量的形式,unicode
python3用unicode存储,不管终端编码是什么,都不会乱码。