encode/decode说明

1. 编码说明

1.1 字符集

  字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等.

常用的字符集有:

  • ASCII字符集
  • GB2312字符集
  • GBK字符集
  • Unicode字符集

1.2 字符编码

  是字符的编码方式,是将字符集中的字符码映射为字节流的一种具体实现方案。例如ASCII字符编码规定使用单字节中低位的7个比特去编码所有的字符。例如字母’A’的编号是65(ASCII码),用单字节表示就是0x41,因此写入存储设备的时候就是b’01000001’。常用的字符编码方式有ASCII编码、UTF-8编码、GBK编码、Big5编码等。

常用的编码方式

  • ASCII
  • ISO8859-1
  • GB2312
  • GBK
  • UTF-8

1.2 总结

  • 字符集只是规定了每种字符所对应的二进制是什么样子的。
  • 字符编码是将字符集对应的二进制转化为计算机可存储的二进制形式。有点类似于:原码 --> 补码的一个过程
  • Unicode ASCII GB2312是一种字符集而不是一种编码
  • UTF-8, GBK等是编码方式
  • Unicode可用UTF-8GBK等方式编码。也就是说Unicode可以用UTF-8编码后存在计算机上也可以用GBK编码后存在计算机上。

注:

  1. 需要强调的是,ASCII便是字符集与字符编码相同的情况,直接将字符对应的8位二进制数作为最终形式存储。因此,当我们提及ASCII,既表示了一种字符集,也代表了一种字符编码,即常说的“ASCII编码”。
  2. Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也即,UCS规定了怎么用多个字节表示各种文字,而怎样存储、传输这些编码,则是由UTF (UCS Transformation Format)规范规定的。UTF会在后文介绍。

2. 编码格式转换

在这里插入图片描述


注:Unicode包含了所有国家的字符编码,不同字符编码之间的转换都需要经过Unicode的过程
Python本身的默认编码是utf-8

2.1 Python2 与 Python3区别

Python2

s = "我是学员" #python2存储字符串默认ASCII编码存储数据
s = u"我是学员" #加一个u表示按照Unicode数据格式存储

Python3

s = "我是学员" #python3中字符串默认存储的都是Unicode格式的数据

2.2 转换编码

# 我们可以用不同编码方式编码同一个字符,最后输出的结果是不同的
s = '我是学员' # Python3默认用UTF-8编码Unicode码存在存储器里,我们现在用gbk编码存储
print('用GBK方式编码', s.encode('gbk'))
print('用UTF-8方式编码', s.encode('utf-8'))
# 输出如下:
用GBK方式编码 b'\xce\xd2\xca\xc7\xd1\xa7\xd4\xb1'
用UTF-8方式编码 b'\xe6\x88\x91\xe6\x98\xaf\xe5\xad\xa6\xe5\x91\x98'

3. 文件编码

我们大概四个地方需要用到编码:

  1. 操作系统默认编码方式。
  2. 终端编码方式。
  3. 程序中的字符、字符串变量的编码方式。

    这种方式就是我们上面介绍到的编码格式转换
  4. 文本文件的编码方式。

    Python源代码也是一个文本文件,Python文件的解释器在获取你的程序文件时不会按照你文件的编码方式自动识别。如果你不在文件内进行上述声明,他会自动按照UTF-8编码方式解码去取文件。如果在这时你的文件刚好是按照GBK的编码方式存储的,他就无法识别,会报错所以我们最好每个文件添加这个声明,并与程序文件编码方式一致

    Python文件编码声明,就涉及到这一点
# -*- coding: utf-8 -*-

参考文档

  1. 字符集与编码
  2. 字符集与字符编码
  3. 字符集与字符编码那些事
  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值