计算机基础:字符集和编码

背景知识

计算机中的数据是二进制存储,而人类的文字对计算机来说是不能识别的。那么为了让计算机能够处理文字,就需要人为的给文字设置一个数字编码(比如65代表A),数字再转为二进制数据,计算机才能够正常处理。

什么是字符集

人工收集的一批文字符号的集合就称为字符集。显然由于文化、国界的存在,自然会产生多种字符集,比如
  • 美国的字符集:主要包含英文子母、音标、标点符号等,这就是ascii字符集
  • 中国的字符集:主要包含中文文字、标点符号等,这就是gb2312字符集等
随着计算机的发展普及,上述这种区域性的字符集无法满足使用需求。因此产生了一种能够代表全世界人类文明的通用字符集,称为Unicode。

什么是字符编码

上述过程中,将字符集中的字符和数字建立对应关系(比如65代表A),就是字符编码;显然字符集和字符编码是密不可分的。
 
如:
ASCII字符集:总数量为256个
ASCII编码:由于ASCII字符集数量较小,因此一个字节所表示的数字个数(256)就能足够表示全部的字符集。即ASCII编码后,每个字符的存储空间就是1字节。
缺点:由于ASCII是最早的字符集,且初期主要用于美国,因此字符集的覆盖率显然不足。
 
如:
GB2312字符集&编码
不同于ASCII字符集,中文体系可不仅几百个字符,因此需要建立一种字符集和对应的编码来满足计算机处理中文的需求。于是由中国国家标准总局发布,在1981年5月1日实施了GB2312字符集&编码标准。该字符集收录的汉字已经覆盖中国大陆99.75%的使用频率。GB2312编码通行于中国大陆,不仅如此,新加坡等地也采用此编码。
 
但是源于中文文化的博大精深,对于人名、古汉语等方面出现的罕用字,GB2312也不能处理了,这导致了后来GBK及GB 18030汉字字符集的出现;
存储空间:基于兼容性及节省空间的要求,英文字符依然采用1字节存储。而中文则采用2字节来表示。

Unicode字符集和编码

以上还都是区域性的字符集和编码,随着计算机普及和网络发展,继续一种能够在全世界通用的字符集和编码,于是Unicode诞生了。
来看看Unicode的别称:统一码、万国码、单一码、标准万国码,Unicode就已经包含了超过十万个字符。它规定了符号对应的二进制代码,至于这个二进制代码如何存储则没有任何规定。它的想法很简单,就是为每个字符规定一个用来表示该字符的数字,仅此而已。
比如中国的中字,16进制下的数值=4E2D,转为二进制=0100 1110 0010 1101,那么至少需要2字节才能存储。
 
Unicode是字符集,UTF-32/ UTF-16/ UTF-8是字符编码方案;
 
  • UTF-32
又称UCS-4,是一种将Unicode字符编码的协定,对每个字符都使用4字节存储表示。但从空间而言,显然是非常没有效率的。
 
  • UTF-16
尽管有Unicode字符非常多,但是实际上大多数人不会用到超过前65535个以外的字符。因此,就有了一种Unicode编码方式,叫做UTF-16(因为16位 = 2字节)。
UTF-16将0–65535范围内的字符编码成2个字节。
优点:UTF-16编码最明显的优点是它在空间效率上比UTF-32高两倍,因为每个字符只需要2个字节来存储(除去65535范围以外的),而不是UTF-32中的4个字节。
 
  • UTF-8
它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。
  • 存储空间:UTF-8使用一至四个字节为每个字符编码;可变长的编码方式。
  • 对ASCII字符集的字符,此编码使用1个字节表示。
  • 对于更复杂的字符(拉丁文、阿拉伯文等),此编码时用2个字节表示。
  • 对于多文种平面的字符(包括中日韩文字、东南亚文字、中东文字等,大部分常用字),此编码时用3个字节表示。
  • 剩余的极少数字符,则用4字节表示。 
特点:由于是变长的编码方式,因此无法根据字符数量判断实际占用的存储空间。

posted @ 2022-01-19 18:33  万德福儿  阅读(393)  评论(0编辑  收藏  举报