在实际的操做中,字符编码是咱们必然会遇到的一个“坑”,在我一开始的打算中我是不许备写这个知识点的,可是我怕朋友们在以后遇到的时候不知道是什么,并且它又是那么的重要,由于它不仅仅是计算机中的一个基础知识,并且仍是一个有历史过程的事情。编程
要讲字符编码,首先咱们要从编码开始谈起。编码这个东西若是单说具体的定义的话可能很难理解,下面我用一个例子解释一下。bash
你们应该都看过战争片,通常要强攻的时候,长官下令冲锋,而后就有一个小兵拿起小喇叭吹冲锋号,这里其实就是一次编码,长官下达冲锋命令,小兵将这个命令编码为冲锋号“嘟嘟嘟嘟”的声音,而后声音在空气中传播,士兵们听到以后通常都会知道这是冲锋的意思,不会听成是打呼噜的声音,长官下达的命令你可能离着远了听不清啥意思,可是一听冲锋号吹起来,接受过训练的人就知道这是要冲锋的意思,不会理解错意思,这也是编码的优点所在。这里要说的是士兵接收到进攻命令,这叫作解码,解码完毕后士兵们明白了,而后才行动。函数
固然以上过程说的很简单,真实的编码和解码过程确定比这个复杂的多,可是总的原理,其实就是这么个意思。编码
编码咱们说完了,那咱们再来讲说什么是字符编码。咱们都知道计算机只能处理数字 (由于电是驱使计算机工做的基本,而电的特征就是高低电平,高电平是 1,低电平是 0),而咱们编程的目的是为了让计算机给咱们干活,从而实现咱们的目的,而编程说白了就是一堆字符,因此一堆字符想要驱使计算机干活,而计算机又只能处理数字,因此说这里面涉及到一点,那就是从字符到数字的这么一个过程,这个过程其实就是一个字符如何对应一个特定数字的标准,这个标准就是字符编码。spa
计算机的字符编码并非一蹴而就的,而是有一个发展的过程。code
ASCII 码cdn
20 世纪 60 年代,计算机发明的早期,那时候美国是计算机领域的大哥,因而他们本身制定了一套字符编码,解决了英文和二进制间的对应关系,这个被称为 ASCII 码。图片
ASCII 码是基于拉丁字母的一套电脑编码系统,主要用于现代英语,由于英语用 128 个字符就够了,可是计算机又不仅仅只是英语系国家用,若是表示其余语言,128 个字符是远远不够的,因而其余的国家,都是在 ASCII 码的基础上,又发明了不少别的编码。utf-8
Unicode 码开发
在编码上,因为出现了不少不一样的形式,因而就出现了 “乱码” ,好比互发邮件的双方,若是使用的编码方式不同,那么收信人就只能看乱码了。因而 Unicode 应运而生,只看它的名字也应该知道,就是要统一符号的编码。
Unicode 对世界上绝大多数的文字系统进行了整理,编码,使得电脑能够用更为简单的方式来呈现和处理文字,它伴随着通用字符集的标准而发展,同时也以书本的形式对外发表。 Unicode 直到今天仍在不断的增修,每一个新版本都加入了更多的字符,它涵盖的数据除了视觉上的字形,编码方法,标准的字符编码外,还包含了诸如大小写字母等的字符特性。它虽然这么能干,你也要保持清醒,它也不是完美的,仍需继续改进。
UTF - 8 UTF 就是 Unicode 的实现方式,而 UTF -8 是如今互联网上流传最广的 Unicode 实现方式,虽然它只是 Unicode 实现方式中的一种,但也隐约有武林盟主的地位。
UTF - 8 是一种针对 Unicode 的可变长度字符编码,也是一种前缀码,它能够用来表示 Unicode 标准中的任何字符,它也是如今电子邮件,网页以及其余存储或者发送文字的应用优先采用的编码。
因此,咱们在之后的 Python 程序开发中,最好都要用 UTF - 8 编码。
在 Python3 中,全部的字符串都是 Unicode 字符串。
若是你想查看一下当前环境的编码格式,能够用 sys 中 的 getdefaultencoding() 函数查看。
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
复制代码
由于 Python3 支持的是 Unicode,因此每一个汉字都对应着一个编码数字,若是你想直到某个汉字对应的编码数字,能够用 ord() 函数,一样若是你想知道某个数字对应的汉字,能够用 chr() 函数。
>>> ord('李')
26446
>>> chr(26446)
'李'
复制代码
最后在说一个函数 encode() ,这个函数可以将 Unicode 编码的字符串转化为其它编码,默认的是 UTF - 8,具体的应用若是有兴趣的话能够用 help(str.encode) 查看。
更多内容,欢迎关注公众号「Python空间」,期待和你的交流。