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

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

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

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

两者之间关系为:
《python疑问3:头痛的字符编码》

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)) //报错,解码格式和编码格式不同

注意事项:

  • 一般编码和解码格式保持一致,即使用utf-8编码后,也要用utf-8解码。否则可能会报错
  • 含有中文的字符编码时不能采用ASCII,因为它不支持中文

习惯:虽然python3去除了python2字符编码的很多诟病,但是一些习惯还是保持下去
譬如头文件添加编码注释

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

如果问python2中怎么办呢?
弃坑吧!

    原文作者:王鹏宇
    原文地址: https://segmentfault.com/a/1190000013107270
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞