2.3 编码

↑扫码看视频

编码是指信息从一种形式或格式转换为另一种形式或格式的过程。编码在计算机、电视、遥控和通讯等方面广泛使用。在本节中,将简要介绍在Python语言中设置程序编码的知识。

2.3.1 字符编码

计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。因为最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以一个字节能表示的最大的整数就是255(二进制11111111=十进制255)。如果要表示更大的整数,就必须使用更多的字节。比如2个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。

世界公认最早的编码标准是ASCII,在里面只包含127个字符(包括英文字母大小写、数字和一些符号),比如大写字母A的编码是65,小写字母z的编码是122。但是要处理汉字显然一个字节是不够的,至少需要两个字节,而且还不能与ASCII编码冲突,所以我国制定了GB2312编码,用来把汉字编进去。在计算机系统中常用的编码格式如下。

● GB2312编码:适用于汉字处理、汉字通信等汉字相关的应用。

● GBK编码:是汉字编码标准之一,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码。

● ASCII编码:是对英文字符和二进制之间的关系做的统一规定。

● Unicode编码:这是一种世界上所有字符的编码,不过它没有固定的存储方式。

● UTF-8编码:是Unicode Transformation Format-8 bit的缩写,UTF-8是Unicode编码的一种实现方式。它是可变长的编码方式,可以使用1~4个字节表示一个字符,根据不同的符号而变化字节长度。

2.3.2 Python中的编码

在默认情况下,Python源码文件以UTF-8格式进行编码,所有字符串都是Unicode字符串。当然开发者也可以为源码文件指定不同的编码,具体格式如下所示。

例如通过如下所示的代码,可以将当前源文件设置为“GB2312”编码格式。

因为Python只会检查 #、coding和编码字符串,所以读者可能会见到下面这样的声明方式,这是开发者为了美观等原因才这样写的。

在Python中使用字符编码时,经常会使用到decode函数和encode函数。特别是在抓取网页的应用中,对于这两个函数使用较多。其中encode的功能是使我们看到的直观字符转换成计算机内的字节形式。而函数decode刚好相反,把字节形式的字符转换成我们能看得懂的、直观的形式。例如下面的代码演示了encode函数的用法。