字符与编码

用户头像
引花眠
关注
发布于: 2020 年 05 月 25 日

广义的编码

大家都知道计算机对于所有信息的存储都是存储的比特流,也就是在最底层只有0和1,而其能将这些01序列展示成我们能看到的多姿多彩的世界,比如图片、网页、视频等,这是因为不同的数据都有其固定的格式,计算机程序对这些比特流进行了“编码”与“解码”从而可以存储信息展示信息。从这里可以看出编码的范围涵盖很广,而在接下来要介绍的“编码”指的是将字符集进行编码。

字符集与编码

字符集

字符集是各种字符的集合,可以包括文字、数字、标点符号等各种字符。常见的字符集包括:

  1. ASCII 美国信息互换标准编码,7位(bits)表示一个字符,共128字符

  2. 中文字符集GB2312与GBK 使用两个字符来表示一个中文字符,GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;GB2312只能表示一些常用的汉字,为了表示更多的汉字有GBK字符集,GBK能表示的汉字有2万多个。

  3. Unicode字符集 在世界各地都有自己的编码字符集,而这些各个编码字符集之间无法相互识别,就会会出现乱码。因此国际标准组织ISO出台了一套16位的字符编码方案以总括现有的各个编码字符集, 称为Unicode。

字符集表示使用的是哪些字符,每个字符在字符集中都有唯一的表示,比如

在GB2312中,汉字通过区位码进行表示,比如“啊”字是GB2312之中的第一个汉字,它的区位码就是1601

而在Unicode中,每个字符都有一个唯一的统一码,其中“啊”字的统一码是\u554a

字符的编码

字符集的编码,则规定每个“字符”分别用一个字节还是多个字节存储,这些字节的格式是怎样的。

比如对于Unicode字符集,其实现方式有很多种比如UTF-32、UTF-16、UTF-8,经常使用的UTF-8的编码方式,具体表示如下:

  1. Unicode字符中 0x0000 到 0x007F 范围内,所以直接去掉前面那个字节 0x00,使用其第二个字节(与ASCII码相同)作为其编码,即为单字节UTF-8编码。

  2. Unicode字符中0x0080 到 0x07FF 范围内,转换成双字节UTF-8编码。

  3. Unicode字符中 0x8000 到 0xFFFF 范围内,转换成三字节UTF-8编码,一般中文都是在这个范围里。

  4. 其他极少使用的语言字符使用4字节编码,比如emoji表情

对于UTF-8的编码表示:单字节以0开头;双字节编码以 110 开头;三字节编码以 1110 开头;10 开头表示多字节编码的后续字节。

所以“啊”字的统一码是\u554a,则将其编码为UTF-8格式时,使用三个字节表示所以其格式时为1110xxxx 10xxxxxx 10xxxxxx,需要16位,而\u554a的二进制表示 (0101 0101 0100 1010)正好有16位,将其填入空位之后则表示成 11100101 10010101 10001010所以“啊”的UTF-8编码的十六进表示就是E5958A



发布于: 2020 年 05 月 25 日 阅读数: 32
用户头像

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

发布
暂无评论
字符与编码