几种经典的字符集

几种经典的字符集

对于计算机来说,任何的字符都是一张图片,计算机把图片绘制在屏幕上,我们就能看到它了。

为了方便传输与编辑,人们事先在每个计算机上存好一套字符库,记录每个字符的样子,其实就是字体文件。每个字符对应一个唯一的ID(也叫做码点),这样计算机处理以及传输字符时,就只处理这些ID。

几种经典的字符集有:

  • ASCII:早期的计算机系统只能处理英文,所以 ASCII 也就成为了计算机的默认字符集,包含了英文所需要的所有字符。
  • GB2312:简体中文编码表,是对 ASCII 的中文扩展,包含了已有的 ASCII 字符集,同时收录了一些常用的中文汉字,甚至还收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。
  • GBK:GB2312 的扩展,完整包含了GB2312的所有内容,并增加了近 20000 个罕见字、繁体字、符号等。
  • GB18030:GBK 字符集的超集,常叫大汉字字符集,也叫 CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符,以及国内一些少数民族的文字字符等。
  • BIG5:繁体中文字符集,也叫大五码或五大码,在台湾、香港、澳门等地区使用较多。
  • Unicode:统一字符集,也叫统一码、万国码、单一码等,涵盖了目前世界上所有的已经发现且需要使用的字符(如中文、日文、英文、德文、拉丁文、希腊字母…所有)。

为什么会出现这么多的字符集呢?

这个很好理解,电脑最先在一些西方国家盛行,因此他们最先遇到处理和传输字符的问题,这便有了ASCII字符集。随着电脑在各个国家的流传,这些国家也需要使用自己国家的字符,便有了GB2312,GBK等这些字符集。但是随着字符集的种类越来越多,字符集间便出现了不兼容的问题。虽然这些字符集大部分都兼容ASCII,但是除了ASCII之外的字符可能出现冲突。例如“你”在GBK中十进制的字符代码是50403,但是在GB2312中便是49609。因此想要在一台电脑中展现不同国家的字符是一件麻烦事。在这种情况下, Unicode 联盟开始为了世界上大多数文字系统进行整理和编码, 创建了 Unicode 统一码规范.

我们常见的UTF-8和UTF-16又是什么?

既然有了Unicode字符集,UTF-8又是什么呢?其实我们常常混淆两个概念,字符代码和字符编码。字符代码是特定字符在字符集中的序号,字符编码是在传输、存储过程当中用于表示字符的以字节为单位的二进制序列。对于一些字符集如ASCII和GB2312来说,字符代码和字符编码是一致的,例如A在ASCII字符集中的字符代码是65,存储在磁盘中的二进制序列(字符编码)是01000001(十进制也是65),无形之中我们便忽略了二者的差异性。在Unicode标准中每个字符需要使用四个字节来表示(字符代码是四个字节),但是其中兼容的ASCII字符集实际上只需要使用一个字节来表示,如果计算机同样使用四个字节(字符编码使用四个字节)进行处理的话是很不划算的,这样就引出了UTF-8和UTF-16等编码方式。UTF-8就是针对不同范围的字符代码转化成不同长度的字符编码,这样便节省了资源。

UTF-8的编码规则

UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。实际将Unicode转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。因此那些基本ASCII字符集中的字符(Unicode兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值