聊聊字符集与字符编码
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机“。
但是这些二进制0和1构成的字节是如何转换成大家想要表达的文本呢。它们的转换其实需要一种统一的标准编码和解码,这就要靠字符集和字符编码了,本期博客就和大家来具体聊一聊。
1. 基础知识
首先我们来看基础知识,字符集和字符集和字符编码。
字符集(Charset)是一种字符编码规则集合的名称。每一种字符集对应自己的一套规则编码。
字符编码(Character Encoding)则是一套法则,它是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。
简单的来说,字符集就是一种规则下字符编码的集合。对应到真实生活中,字符集就是对某种语言的称呼。例如:英语,汉语,日语等等。在计算机种,常见字符集的有ASCII码,GB编码,Big5编码以及Unicode等。
2. 常用的字符集及其编码
2.1 ASCII码
ASCII码是1961年美国制定了一套字符编码,用于在不同计算机硬和软件系统中实现数据传输标准化的一套编码。它对英语字符与二进制位之间的关系,做了统一规定。
基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准。
由于计算机基本处理单位为字节( 1byte = 8bit ),所以一般仍以一个字节来存放一个 ASCII 字符。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为 0 (在数据传输时可用作奇偶校验位)。
2.2 GBK编码
GBK全称Chinese Internal Code Extension Specification,汉字内码扩展规范,它1980年由国家标准总局发布。它是GB2312的扩展,基本满足了汉字的计算机处理需要。
GBK采用双字节表示,字符有单字节和双字节编码,单字节00–7F范围内,和ASCII保持一致。采用双字节编码时,总体编码范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 之间,剔除 xx7F一条线。总计23940 个码位,共收入21886个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个。
2.3 Big5编码
Big5,又称为大五码或五大码,是使用繁体中文(正体中文)社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。
Big5码是一套双字节字符集,使用了双八码存储方法,以两个字节来安放一个字。第一个字节称为"高位字节",第二个字节称为"低位字节"。"高位字节"使用了0x81-0xFE,"低位字节"使用了0x40-0x7E,及0xA1-0xFE。因为Big5的字符编码范围同GB2312字符的存储码范围存在冲突,所以在同一正文不能对两种字符集的字符同时支持。
3. 聊聊Unicode
4. 谈谈颜文字和emoji
(...待续,需要的资料稍多)