3. 编码知识总结
1)字符编码发展史
2)以小写字母a为例,说明字符编码
3)带着大家写写代码,认识一下字符编码
① 关于Python2和Python3的区别
在Python2中,默认字符编码是ASCII码,因此在Python2中写中文,首行一般都会加上-- coding:utf-8 --,看了这篇文章,我想你对这个东西已经有了一个清楚的认识。但是Python2现在已经停止更新了,我们了解即可,不用太关注。
对于Python3.x来说,默认字符编码是utf-8,而utf-8是Unicode的扩展集。即Python3.x中默认所有的字符都是Unicode。说白点,我们在Python3.x中随便写点啥,编码就是Unicode编码。
对比Python2和Python3:
# 在Python2中如果要表示Unicode编码,应该这样写。 my_name = u"黄伟" # 在Python3中如果要表示Unicode编码,应该这样写。 my_name = "黄伟"
说到这里,我们可以下一个结论:不同编码之间的转换,都要经过一个Unicode。
② encode编码和decode解码
>>> name1 = "我是你们的teacher老师" >>> name2 = "你们是我的student学生" >>> # 将name1编码为“utf-8” >>> name1_encode = name1.encode("utf-8") >>> name1_encode b'\xe6\x88\x91\xe6\x98\xaf\xe4\xbd\xa0\xe4\xbb\xac\xe7\x9a\x84teacher\xe8\x80\x81\xe5\xb8\x88' >>> # 将name1_encode解码还原 >>> name1_encode.decode("utf-8") '我是你们的teacher老师' --------------------------------------------------------- >>> # 将name2编码为“gbk” >>> name2_encode = name2.encode("gbk") >>> name2_encode b'\xc4\xe3\xc3\xc7\xca\xc7\xce\xd2\xb5\xc4student\xd1\xa7\xc9\xfa' >>> # 将name2_encode解码还原 >>> name2_encode.decode("gbk") '你们是我的student学生' ------------------------------------------------- >>> # name1_encode此时是“utf-8”编码,如果用“gbk”解码,会出现什么? >>> name1_encode.decode("gbk") '鎴戞槸浣犱滑鐨則eacher鑰佸笀' # 上面就是我们常说的乱码、乱码、乱码!
代码分析: 从代码中可以看出,如果是utf-8编码,每个中文字符就是3个字节存储。如果是gbk编码,每个中文字符就是2个字节存储。