python疑问3:头痛的字符编码

一提到字符编码,我身边的好多朋友都挥手,拜拜!字符编码就像一个烙印深深地印在心底,成为心病。
今天就来啃一啃这老骨头。
咱们遇到过哪些编码?
ASCII,ANSI,GB2312,GBK,Unicode,UTF-8,MBCS,JIS,KS等等,为何会出现这么多不一样的编码,他们之间又有什么不一样呢?
咱们能够看看字符编码的历史,就能解决心中的疑惑了
图片描述python

由图可见,计算机当时从美国诞生,因此美国在设置字符编码的时候,并未考虑其它国家。因此当计算机在全球范围内进行覆盖时,各国纷纷制定属于本国的专属字符编码方案。因为各个方案互相并不兼容,因此便有Unicode一统天下。
知道了每一个字符编码的由来,咱们再看python中编码疑问就很好解释了。编码

  • python3将系统默认编码设置为utf-8
  • python3用str表示Unicode全部字符,bytes类型表示二进制数据

二者之间关系为:
图片描述spa

b = '好'
print(type(b)) //<class 'str'>

c = b.encode('utf-8')
print(type(c)) //<class 'bytes'>

c = b.encode('ASCII')
print(type(c)) //报错,ASCII不支持中文

d = c.decode('utf-8')
print(type(d)) //<class 'str'>

d = c.decode('gb2312')
print(type(d)) //报错,解码格式和编码格式不一样

注意事项:code

  • 通常编码和解码格式保持一致,即便用utf-8编码后,也要用utf-8解码。不然可能会报错
  • 含有中文的字符编码时不能采用ASCII,由于它不支持中文

习惯:虽然python3去除了python2字符编码的不少诟病,可是一些习惯仍是保持下去
譬如头文件添加编码注释图片

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

若是问python2中怎么办呢?
弃坑吧!utf-8

相关文章
相关标签/搜索