python学习之字符编码
字符分类及历史
ASCII
0-255 从数字到小写大写英文字母,加上一些特殊符号,常用的低字节(0-127)也是基本表,非常用的高字节(128-255)也是扩展表,8位为1字节,ASCII中每一个字符占一个字节
GB2312
中国1980年,为中文在计算机应用而制定的编码系统,一个字符占两个字节,中英文环境下兼容ASCII码,以连续两个高字节在一起就为中文字符
GBK
在GB2312的基础上扩展而来,一个字符占两个字节
unicode
unicode称之为万国码,包括各国语言字母及文字,与所有国家的编码有映射关系,2-4字节存一个字符是,在这当中一个中文字符占3个字符
其它编码转换为unicode为解码(decode),unicode转换为utf-8为编码(encode)
utf-8 union transfor format 可变长编码
为优化unicode存储空间过大的问题而出现了UTF-8
UTF-8用于文件存储和网络传输,但在内存中依然是unicode
mac、linux系统默认为utf-8,windows中国版系统默认为GBK
字符在python中的应用
python2中字符都以ASCII码解释存储
如GBK编码存储字符
python2代码涉及字符时,需要在第一行申明(如#coding:utf-8),其实就是告诉解释器这后面的代码是UTF-8编码写的,以UTF-8解释并存储,但因py2只支持ASCII码所以打印出来通常是乱码,需要转为unicode才能正常显示(str.decode("utf-8")以UTF-8转为unicode)
python3中字符在内存中以unicode存储,在文件中以utf-8存储
python3中代码以GBK编码,运行时解释器会以GBK编码转为unicode存在内存中