python字符编码
字符编码
文本编辑器存储信息的过程
1.打开编辑器就和打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放在内存中的,断电后数据丢失
2.想要永久存储,需要点击保存按钮:编辑器把内存的数据刷到硬盘上
3.在编写一个py文件,跟编写其他文件没有任何区别,都是再写一堆字符而已
unicode
早期,各个国家都有各个国家的编码,所以出现了unicode(一种对应关系)(在内存中)
unicode可以认识所以的编码
例如:
硬盘中无论有什么格式的编码文件,Unicode都可以识别,假设我们需要看日本的文件,从硬盘中读取fuck编码,然后unicode识别,unicode把其转换成gb2312,解决了乱码的问题,随后用unicode存。
utf8
因为unicode存的时候占用了很多空间,所以出现了utf8(只和unicode一一对应),从而解决了unicode 内存占用的问题
内存中是不用utf8的,因为utf8和gb2312等其他编码没有转换关系,所以内存都要用unicode.
gb2312和gbk的区别
gb2312-->常用字
gbk-->所有字
windows系统的记事默认编码是gbk,除此之外都是utf8
乱码
存文件时不乱码而读文件时乱码
写用utf8,存用utf8,读用gbk
存文件时就已经乱码
写用utf8,存用gbk
想要不乱码,用什么编码写,就用什么编码读
编码和解码
编码:unicode-->utf8 从内存到硬盘
解码:utf8-->unicode 从硬盘到内存
现在内存只有unicode编码
python解释器 解释python代码的流程
1.python解释器相当于文本编辑器,把代码读入python解释器中,随后字符编码(python2默认的是ascill,python3默认的是utf8)最后上coding头
中文# gbk编码的中文
2.识别代码——》print有意义--》语法问题
# coding:gbk#告诉python解释器用gbk去完成第一步,读入字符
3.产生结果--》跑到终端——》字符编码
终端特性:电脑是什么编码,就按照什么编码来,window终端是gbk
python2和python3编码的区别
python
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 # ['\xe4\xb8\xad\xe6\x96\x87']
lt2 = u'中文' # u'中文'让他变成unicode # 早期用python2定义中文,必须得加上u,让他变成unicode存储
# lt2 = [u'中文']
print lt2 # '中文
python3
python3只有一种存储变量的形式,unicode
python3用unicode存储,终端接受的是unicode,windows终端编码是utf8还是gbk不重要,不会乱码
lt1 = '中文' # == u'中文'
print(lt1)