我们日常书写的文字是语言的编码;五线谱是音乐演奏的编码。那么计算机世界的编码又是如何构成的? 构成一切的0和1 二进制是只有0和1两个数字组成的计数系统。0和1两个状态与电路的开关状态非常相似,所以计算机中所有的数据都是由一串串二进制数字表达。最小的数据表达单位是位(bit,音译:比特),常用小写字母b表示。8个位是1字节(byte),常用大写字母B表示。网络传输的基础单位使用b,计算机存储的基础单位使用B,在使用过程中应特别注意两者有8倍的数量差异。 “最简单”的编码:ASCII ASCII编码采用7位二进制数表示128个字符。字符中包含了大小写英文字母、数字0-9及常用的符号。在所有的字符编码标准中,ASCII是最小且最常用的编码。在计算机编程的过程中,编程语言都会原生支持ASCII编码的数据类型。由于ASCII编码的普及性,后续的字符编码多兼容ASCII编码,前7位二进制内容与ASCII编码完全一致。我国的标准编码是GB18030 2022版本,并于2023年8月1日开始正式实施。国际化常用的编码为UTF-8(Unicode Transformation Format-8),可以表示Unicode字符集中的所有字符。 ASCII可见字符编码示意图 倒过来行不行? 随着互联网的兴起,电子邮件系统需要一种可以传送二进制文件的编码方式。由于邮件协议采用文本协议传输信息,所以就需要一种可以表示二进制数据的文本编码。如果直接使用ASCII编码中的0和1,数据量将增大到7倍。如果采用十六进制字符表示,数据量也将增大到2倍。Base64编码使用64个ASCII字符形成一个“64进制”的编码,这样3个字节的数据可以用4个Base64的字符进行表示。URL地址编码也采用表Base64编码,字符由两部分组成。以%作为开头,字符对应的数字用两位十六进制表示。 Base64编码示例 编码如何优化“体积” 通过字符重新对内存数据进行编码会导致数据量膨胀,那有没有一种技术可以缩小编码的体积?哈夫曼编码就是这样一种方法,通过优化码的定义顺序降低整体的数据量。编码分为固定长度、变化长度两种,固定长度编码所有码的长度固定,无法优化编码体积,变化长度编码把使用量大的码定义为短码,而使用量小的码定义为长码,码与码之间使用特殊符号分割。前面提到的UTF8编码就是一种变长的Unicode编码。哈夫曼编码只是一种优化方式,数据进行重新编码的方式还有很多,例如:倒排索引的位置压缩。 编码是智慧的结晶,蕴含着创造者对特定数据集合的深刻理解。通过学习编码的原理我们可以更深入了解数据之间的关系,掌握如何组织数据的技巧。 |
|