python学习---字符编码
字符编码
python解释器在加载.py文件中的代码时,会对内容进行编码(默认是ascII)
二进制
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
二进制与字符串进行转换就要用到字符编码
ASCII(Americal Standard Code for Information Interchange)美国标准信息交换代码 ,是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多能用8位来表示一个字节,即:2**8=256-1,所以,Ascll码最多只能表示255个符号
1980年GB2312一共收录了7445个字符,包括6763个汉子和682个其他符号
1995年GBK1.0收录了21886个符号,它分为汉字区和图像符号区,汉字包括21003个字符。
2000年GB18030取代了GBK1.0,并收录了27484个汉子,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不做要求。所以手机、MP3一般支持GB2312
通常我们还是用GBK指代中文windows内码
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种计算机上使用的字符编码。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽然有的字符和符号最少由16位来表示(2个字节)即2**16=65536
注意:此处说的最少2个字节,可能更多
UTF-8, 是对Unicode编码的压缩和优化,它不再使用最少使用2个字节,而是将所有的字符和符号进行分类
ASCII码中的内容用1个字节保存,欧洲的字符用2个字节保存,东亚的字符用3个字节保存
所以,python解释器在加载.py文件中的代码时,会对内容进行编码(默认ascii)如果如下代码的话
报错:ascii码无法表示中文
#!/usr/bin/env python print('你好,世界')
改正,应该显示告诉python解释器,用什么编码来执行源代码,如
#!/usr/bin/env python # -*- coding: utf-8 -*- print('你好,世界')
下面的图片就解释了编码的发展史,如图
注意:在python2中不支持中文输入,在python3中支持中文
比如,下图就是在python2中执行的结果,报错了
之后,在文件顶部指定编码格式就可以了 # -*- coding:utf-8 -*-,如图