万字长文讲解编码知识,看这文就够了!| 原力计划


万字长文讲解编码知识,看这文就够了!| 原力计划

文章插图
作者 | Aledsan
责编 | 王晓曼
出品 | CSDN博客
万字长文讲解编码知识,看这文就够了!| 原力计划

文章插图
基础概念
1、字符
字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号 。一般来说我们称某个字符集里面的字符,叫xx字符,如ASCII字符集里面的ASCII字符,GB2312字符集里面的GB2312字符 。
2、字符集
字符集(Character Set、Charset),字面上的理解就是字符的集合,是一个自然语言文字系统支持的所有字符的集合 。字符是各种文字和符号的总称,包括文字、数字、字母、音节、标点符号、图形符号等 。例如ASCII字符集,定义了128个字符;GB2312字符集定义了7445个字符 。而字符集准确地来说,指的是已编号的字符的有序集合(但不一定是连续的,后文有详细介绍) 。
常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等 。
3、码位
在字符编码术语中,码位(code point)或称编码位置、码点,是组成码空间(或代码页)的数值 。例如,ASCII码包含128个码位,范围是016进制到7F16进制,扩展ASCII码包含256个码位,范围是016进制到FF16进制,而Unicode包含1,114,112个码位,范围是016进制到10FFFF16进制 。Unicode码空间划分为17个Unicode字符平面(基本多文种平面,16个辅助平面),每个平面有65,536(= 216)个码位 。因此Unicode码空间总计是17 × 65,536 = 1,114,112. —解释来源于维基百科 。
4、字符编码
字符编码(Character Encoding),是把字符集中的字符按一定方式编码为某指定集合中的某一对象的过程(比如将字符编码为由0和1两个数字所组成的位串模式、由0~9十个数字所组成的自然数序列或电脉冲等),亦即在字符集与指定集合两者之间建立一个对应关系(即映射关系)的过程 。这是信息处理的一项基础技术 。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII码 。
PS:这里我们计算机这里字符编码肯定是用二进制来编码的 。
看完这四个概念,你应该要明白,它们之间的关系,以ASCII为例,下图解释它们之间关系 。
万字长文讲解编码知识,看这文就够了!| 原力计划

文章插图
这里细说一下,码位就是这个字符集里面字符的一个表示位置,通俗来说,码位就是一般跟字符集绑在一起,字符编码是把字符集中的字符编码为特定的二进制数,以便在计算机中存储 。这个二进制数就叫xx码 。
万字长文讲解编码知识,看这文就够了!| 原力计划

文章插图
字符集编码分类总结
在说字符集编码之前,先明确一个观点,字符集编码与字符集是两个不同层面的概念:
(1)charset 是character set 的简写,即字符集 。
(2)encoding 是 charsetencoding 的简写,即字符集编码,简称编码 。
万字长文讲解编码知识,看这文就够了!| 原力计划

文章插图
1、ASCII编码
ASCII(美国信息交换标准代码)是基于拉丁字母(就是我们现在的英文字母)的一套电脑编码系统 。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646 。
ASCII由电报码发展而来 。第一版标准发布于1963年,1967年经历了一次主要修订,最后一次更新则是在1986年,至今为止共定义了128个字符;其中33个字符无法显示(一些终端提供了扩展,使得这些字符可显示为诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符 。控制字符的用途主要是用来操控已经处理过的文字 。在33个字符之外的是95个可显示的字符 。用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白) 。
每个ASCII字符占用1个字节(8bits),共有128位字符或符号,使用7位二进制数(剩下的1位二进制为0,即高位为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 。
缺点:ASCII的最大缺点是只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,因此只能用于显示现代美国英语(而且在处理英语当中的外来词如naïve、café、élite等等时,所有重音符号都不得不去掉,即使这样做会违反拼写规则) 。而EASCII(即扩展的ASCII码,利用8位的高位设为1进行扩展)虽然解决了部分西欧语言的显示问题,但对更多其他语言依然无能为力 。因此现在的操作系统内码(稍后会讲)基本已经抛弃ASCII码而转用Unicode码 。


推荐阅读