码农的ABC:编码的初步认识

date
Oct 11, 2016
slug
intro-code
status
Published
tags
DevOps
summary
本文简要梳理了编码的发展历程,从早期的ASCII码到GB2312码解决中文编码,后续GBK码扩充汉字数量,奠定Unicode实现编码统一的基础,UTF-8使Unicode可在网络传输,编码技术在Absorbing前人积累的同时结合实际需求演进,希望这些发展历程能加深对编码的认识。
type
Post
💡
作为码农,编码这几个字母绕是跑不开的。什么是编码?简单来说,编码就是用数字代表字符,把人类能读取的字符转换为计算机能读取的数字。那么码农们每天打交道的各种编码都是什么呢?今天就跟大家聊聊这些「编码的字母表」。

ASCII码:回到编码的起点

说到编码,恐怕第一批要提到的就是ASCII码了。ASCII码全称是“美国信息交换标准代码”,是基于拉丁字母的一套电脑编码系统,于1967年由美国国家标准局制定。
ASCII码一共定义了128个字符,包括英文字母、数字、标点符号、控制字符等。每个字符都用一个0-127的数字来表示,比如大写的A是65,小写的z是122。
作为最早的编码标准,ASCII码就像编码的起点,奠定了后来编码发展的基础。虽然只包含了基本的英文和符号,但直到今天,这些ASCII字符还在各种编码中广泛应用着。

GB2312码:中文电脑编码的开端

上世纪80年代,随着个人电脑在中国的普及,市面上出现了各种汉字编码方案,但标准不一、乱码频发。为了统一中文编码,国家技术监督局于1980年发布了GB2312-80编码,这就是中国大陆通行的第一个汉字编码标准。
GB2312收录了6763个常用汉字,每个汉字用两个字节编码。这对于当时来说已经是一个可喜的进步,不过可表示的汉字数量还比较有限。

GBK码:汉字编码升级之作

90年代互联网的兴起使得GB2312显得力不从心,于是1995年GBK编码横空出世。GBK是在GB2312的基础上增加了21003个汉字,扩展到了20902个汉字,基本能满足当时中文信息交换的需要。
不过GBK只定义了单字节和双字节编码,对多字节汉字的支持有限。而且编码范围混乱,找起来不方便。这就为后来unicode的诞生埋下了伏笔。

Unicode:编码的统一之道

Unicode于1991年问世,其目标是成为一种统一的、国际通用的编码。它收录了全世界主要语言的字符,每个字符确定一个唯一的编码,从而很好地解决了传统编码的限制和混乱问题。
Unicode当初设定是16位的编码范围,可表示65536个字符。但后来随着需求增长,Unicode扩展到了21位,可支持100多万个字符,基本涵盖了人类使用的所有文字。

UTF-8:在互联网中传递Unicode

Unicode作为一种统一的编码标,解决了编码混乱的问题。但如果直接在网络中传输,由于JavaScript和许多传输协议对Unicode支持不好,所以产生了UTF-8编码。
UTF-8是一种针对Unicode进行优化的可变长编码。它可以使用1-4个字节表示Unicode字符,较小的ASCII字符用一个字节编码,较大的用多个字节组合编码。这就巧妙地兼容了ASCII,也提供了对Unicode的支持。
现在互联网上使用最广的就是UTF-8编码了。它基本实现了编码的统一,解决了网页乱码、软件兼容等问题,可以说是编码发展的里程碑。

总结

从早期的ASCII、GB2312,到GBK的扩展、Unicode的统一,再到UTF-8的优化,编码的发展路径积累和借鉴前人经验的特征。从中也可以看出,产生一个好的编码标准需要技术积累和对实际需求的密切结合。希望这些编码的“成长史”,可以增进大家对编码的认识,也让我们在编码道路上能不断前行。

© KangVcar 2016 - 2024