关于Python编解码的知识

编码的发展历史

  1. 最早的编码是美国发明的ASCII,ASCII编码占用1个字节,8个二进制位,最多能够表示2的8次方256个字符。随着计算机的发展,ASCII码已经不能满足世界人民的需求。因为世界各国语言繁多,字符远远超过256个。

  2. 中国为了处理汉字,设计了GBK(GB2312)编码,它用16个比特位表示一个中文字符,所能表示的汉子个数2的16次方减一65535个,基本上涵盖了我们常用的汉字。

  3. Unicode编码,把所有语言都统一到一套编码里。Unicode规定字符最少使用2个字节表示,所以最少能够表示2的16次方=65536个字符。

  4. UTF-8,是对Unicode编码的压缩和优化,它不再要求最少使用2个字节,而是将所有的字符和符号进行分类:ASCII码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。如果你要传输的文本包含大量英文字符,用UTF-8编码就能大大节省空间。

    目前,内存中一般使用的字符编码是Unicode,硬盘中使用的字符编码是UTF-8

如何理解编码与解码

从内存(文本信息字符串)存到磁盘(二进制字节数据)的过程,称为编码。

从磁盘(二进制字节数据)到内存(文本信息字符串)的过程的过程,称为解码。

在计算机内存中统一使用Unicode编码,当保存到硬盘或者需要传输时,就转换到UTF-8编码。

比如:用记事本编辑文本时,文件读取从磁盘的UTF-8字符被转换为Unicode字符到内存中,保存文件时,会把Unicode字符转换为UTF-8字符保存到磁盘中。

Python解释器执行代码的时候,需要把解释器和执行程序加载到内存中执行。

如何保证不乱码?

存的时候用什么编码,取的时候就用什么编码。

内存中编码都是Unicode,但是保存到硬盘中就要指定一个字符编码,而从硬盘中读取到内存就要用存取的编码,否则就会出现乱码。

Python中的默认编码

Python解释器也类似于一个文本编辑器,Python解释器也有自己默认的编码方式。

Python2.x默认ASCII码,python3.x默认的utf-8,可以通过如下方式查询:

查询默认编码方式

import sys
print(sys.getdefaultencoding())
输出
utf-8(python3环境)
ascii(python2环境)

如果不想使用默认的解释器编码,需要用户在文件开头进行声明

如果在python2解释器去执行一个utf-8编码的文件,就会以默认的ASCII去解码utf-8,一旦程序中有中文,自然就解码错误了,所以我们在文件开头位置声明 

coding:utf-8,其实就是告诉解释器,你不要以默认的编码方式去解码这个文件,而是以utf-8来解码。

Python3的解释器默认utf-8编码,已经不需要添加这一行声明了。

原创内容,禁止转载
程序员知识精选 » 关于Python编解码的知识