字符集
字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。而字符集(Character set)则是多个字符的集合。
简单的说,字符集就规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。
字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、GBK字符集、GB18030字符集、BIG5字符集、Unicode字符集等。
对于一个字符集来说要正确编码转码一个字符需要三个关键元素:字库表、编码字符集、字符编码。
字库表
一套字符集不一定包含世界上所有的字符,每套编码规范都有自己的使用场景。
而字库表就存储了编码规范中能显示的所有字符,计算机就是根据二进制数从字库表中找到字符然后给到上层应用显示,相当于一个存储字符的数据库。
例如:几乎所有汉字都保存在GBK 字符集的字库表中。所以可以显示汉字,但法语,俄语并不在其字库表中,所以GBK不能显示法语,俄语等不包含在其中的字符。如图:
编码字符集
在一个字库表中,每一个字符都有一个对应的二进制地址,而编码字符集就是这些地址的集合。
例如:
在ASCII码的编码字符集中,字母A的序号(地址)是65,65的二进制就是01000001。我们可以说编码字符集就是用来存储这些二进制数的。而这个二进制数就是编码字符集中的一个元素,同时它也是字库表中字母A的地址。我们根据这个地址就可以显示出字母A。如图:
字符编码
字符编码即为:字符集合中的每个字符在计算机系统中存放(编码)和表示(解码)字符对应二进制数的方式。
因为计算机存储单位一般为字节,因此各种字符编码系统以字节为基础进行表示。
计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。
相应的解码过程如下: