对于计算机来说,任何的字符都是一张图片,计算机把图片绘制在屏幕上,我们就能看到它了。
为了方便传输与编辑,人们事先在每个计算机上存好一套字符库,记录每个字符的样子,其实就是字体文件。每个字符对应一个唯一的ID(也叫做码点),这样计算机处理以及传输字符时,就只处理这些ID。
这个很好理解,电脑最先在一些西方国家盛行,因此他们最先遇到处理和传输字符的问题,这便有了ASCII字符集。随着电脑在各个国家的流传,这些国家也需要使用自己国家的字符,便有了GB2312,GBK等这些字符集。但是随着字符集的种类越来越多,字符集间便出现了不兼容的问题。虽然这些字符集大部分都兼容ASCII,但是除了ASCII之外的字符可能出现冲突。例如“你”在GBK中十进制的字符代码是50403,但是在GB2312中便是49609。因此想要在一台电脑中展现不同国家的字符是一件麻烦事。在这种情况下, Unicode 联盟开始为了世界上大多数文字系统进行整理和编码, 创建了 Unicode 统一码规范.
既然有了Unicode字符集,UTF-8又是什么呢?其实我们常常混淆两个概念,字符代码和字符编码。字符代码是特定字符在字符集中的序号,字符编码是在传输、存储过程当中用于表示字符的以字节为单位的二进制序列。对于一些字符集如ASCII和GB2312来说,字符代码和字符编码是一致的,例如A在ASCII字符集中的字符代码是65,存储在磁盘中的二进制序列(字符编码)是01000001(十进制也是65),无形之中我们便忽略了二者的差异性。在Unicode标准中每个字符需要使用四个字节来表示(字符代码是四个字节),但是其中兼容的ASCII字符集实际上只需要使用一个字节来表示,如果计算机同样使用四个字节(字符编码使用四个字节)进行处理的话是很不划算的,这样就引出了UTF-8和UTF-16等编码方式。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个二进制位)便可以表示。
本文发布于:2024-01-30 15:14:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170659885520911.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |