由于计算机只能识别和处理数字,因此计算机若要处理字符串,则需要将其转化成数字的形式,也就是以二进制(0和1组成的序列)的形式进行存储和操作。字符被翻译成数字的过程,被称为编码;反之,被称为解码。
只要计算机编码和解码过程一致,可以制定任意的数字来代表字符。因此在早期的时候,存在很多种不同的编码。但是,在跨越不同的计算机系统的时候,编码规则的不同导致了无法正常地在系统中识别来自对方的文本数据,结果显示为乱码。
为了避免这个问题,美国对计算机系统编写了标准编码,被称为 ASCII(美国信息交换标准代码),通常用1个字节(byte)表示一个字符。使用 0~127来表示键盘上的字符以及一些数字和符号。例如 大写字母A~Z 用 65~90 来表示,小写字符 a~z 用 97~122。
但是每个国家都有自己所需要的符号,因此各国基于ASCII 标准进行对字符编码的拓展。例如 中国编写了GB2312。不同的语言又会产生文本显示的乱码,因此现在大部分系统都使用 Unicode 编码标准,这个标准几乎包含了所有书面语言的字符。通常使用 2个字节来表示一个字符。
然后,新的问题又出现了。当文本都是英文的时候,Unicode编码会比ASCII编码多出一倍的存储空间,导致存储的浪费和影响数据传输的速度。因此又有一个新编码标准应用而生了—— UTF-8编码,定义成“可变长编码”,将Unicode字符根据不同数字的大小打包成1-6个字节,用单个字节存储ASCII集合中的字符,中文通常为3个字节,可能最多需要用4-6个字节来表示一些更深奥、更生僻的词。
了解ASCII编码,Unicode编码,UTF-8编码后,学习了一下计算机系统通常的字符编码的工作方式。
计算机内存:Unicode编码
硬盘存储和数据传输过程:UTF-8编码
在Python3.0中,字符串以Unicode编码,也就是说,Python支持多语言编辑。例如一个字符串中可包括英文和中文。
Python提供了单字符和数字切换的内置函数。ord()返回单字符串的数字编码,chr() 返回数字编码对应的字符。
Python还提供了字符串在不同编码之间转换。
encode() :将Unicode编码的字符串,返回出指定的编码类型的字节流内容。英文可以用ASCII编码为字节流,内容不变;中文可以用UTF-8编码,但不能用ASCII编码,因为超出了ASCII编码范围。
decode(): 将字节流数据转换成字符串。