计算机字符编码基础知识

计算机字符编码基础知识

 

由于计算机只能识别0和1,所以字符(文字、符号)需要编码,图像、音频、视频等也需要编码。本文主要介绍字符编码,特别是与机内码相关的内容。

字符的处理涉及到下列三类编码:

输入码,也叫外码,如键盘输入法编码。

机内码,主要解决字符的储存。

输出码,又称为字形码、字模码、涉及字形库(字库),包括点阵字形、轮廓描述字形。

 

下面着重介绍与机内码相关的内容。

字符

字符(Character):说的简单点字符是各种文字和符号的总称。一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号、一个图形符号或者控制符号等。

字符编码

字符编码(Character Encoding):字符编码是指一种映射规则,根据这个映射规则可以将某个字符映射成其他形式的数据以便在计算机中存储和传输。例如ASCII字符编码规定使用单字节中低位的7个比特去编码所有的字符,在这个编码规则中字母A的编号是65(ASCII码),用单字节表示就是0x41,因此写入存储设备的时候就是二进制的 01000001。每种字符集都有自己的字符编码规则。

 

在计算机科学领域中,Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统。Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式对外发表。Unicode 还不断在扩增, 每个新版本插入更多新的字符。Unicode 就已经包含了超过十万个字符(在2005年,Unicode 的第十万个字符被采纳且认可成为标准之一)、一组可用以作为视觉参考的代码图表、一套编码方法与一组标准字符编码、一套包含了上标字、下标字等字符特性的枚举等。Unicode 组织(The Unicode Consortium)是由一个非营利性的机构所运作,并主导 Unicode 的后续发展,其目标在于:将既有的字符编码方案以Unicode 编码方案来加以取代,特别是既有的方案在多语环境下,皆仅有有限的空间以及不兼容的问题。

 

ASCII

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。

这套编码规则是由美国定制,一共规定了128个字符的编码,比如空格"SPACE"是32(十进制)(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括 32个不能打印出来的控制符号),只占用了一个字节(8 bit)的后面7位,最前面的1位统一规定为0,总共才有128个字符编码。

对于美国人来说,这完全足够用了,但是对于其它国家,如中国文字来说,一个字节实在是太少了,于是很多地区国家就有了自己的扩展编码标准,但无一例外的兼容 ASCII 编码。

为了处理中文汉字,我国设计发布了GB2312、GBK、GB18030等编码标准:

GB2312:基本集共收入汉字6763个和非汉字图形字符682个。

GBK:共收录了21003个汉字。

GB18030 :共收录汉字70244个。

对此就不深入介绍了,原因见下面。

 

Unicode

显然,各个国家要想让计算机处理其文字,因此制定了各种各样的编码标准。有没有一种编码标准能收录世界上所有的字符,并提供存储实现呢?

Unicode 的诞生就是为了统一世界上所有编码的,它包含了世界上近乎所有的字符,总共收录将近 110 多万个字符集合,编号范围从 0x000000 到 0x10FFFF。但大多数字符在范围:0x0000 到 0xFFFF 之间(即小于 65536),每个字符都有一个 Unicode 编号并且一般用十六进制表示,前置 U+ 如: U+0041表示英语的大写字母A,U+4E25表示汉字严。

Unicode是一种编码标准,它只是为世界上的所有字符进行了编号,并没有指定每个字符每个编号该如何映射为某个二进制串, Unicode 的主要实现方式有: UTF-8、UTF-16和UTF-32。下面,简要介绍具体实现细节。

Unicode中的码点(Code Point)范围是U+0000~U+10FFFF,把每65536个码点作为一个平面(Plane),总共17个平面,编号从0开始,第一个平面称为Plane 0。

第一个平面即是BMP(Basic Multilingual Plane 基本多语言平面),也叫Plane 0,它的码点范围是U+0000~U+FFFF。这也是我们最常用的平面,日常用到的字符绝大多数都落在这个平面内。UTF-16只需要用两字节编码此平面内的字符。

后续的16个平面称为SP(Supplementary Planes、增补平面)。显然,这些码点已经是超过U+FFFF的了,所以已经超过了16位空间的理论上限,对于这些平面内的字符,UTF-16采用了四字节编码。

注:其中很多平面还是空的,还没有分配任何字符,只是先规划了这么多。

UTF-8(8-bit Unicode Transformation Format)

UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8 的编码规则:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。

2)对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

下表总结了编码规则,字母x表示可用编码的位。

汉字 [杨] 的 Unicode 编号是:0x6768 ,十进制:26472,二进制是:0110 0111 0110 1000

显然,该汉字的 UTF-8 标准编码格式为:1110xxxx 10xxxxxx 10xxxxxx

0x6768 的二进制是:0110 0111 0110 1000

从这个二进制的最后一位开始,依次从后向前替换编码格式中的 x 即可。

 

UTF-16

UTF-16只使用2或4个字节编码。UTF-16也是Unicode一种具体的编码实现。UTf-16编码规则如下:

① 若Unicode码点在第一平面(BMP)中,则使用2个字节进行编码。

② 若Unicode码点在其他平面(辅助平面),则使用4个字节进行编码。

关于辅助平面的码点编码更详细解析如下:辅助平面码点被编码为一对16比特(四个字节)长的码元, 称之为代理对(surrogate pair), 第一部分称为高位代理(high surrogate)或前导代理(lead surrogates),码位范围为:D800-DBFF. 第二部分称为低位代理(low surrogate)或后尾代理(trail surrogates), 码位范围为:DC00-DFFF。注意,高位代理的码位从D800到DBFF,而低位代理的码位从DC00到DFFF,总共恰好为D800-DFFF,这部分码点在第一平面内是保留的,不映射到任何字符,所以UTF-16编码巧妙的利用了这点来进行码点在辅助平面内的4字节编码。

字符”A”的Unicode码点为65(十进制),十六进制表示为41,在第一平面。根据规则,UTF-16采用2个字节进行编码。那么问题又来了,知道了采用两个字节编码,并且我们也知道计算机是以字节为单位进行存储,这两个字节应该表示为00 41(十六进制)?或者是41 00(十六进制)呢?这就引出了一个问题,需要用到之前提及的BOM机制来解决。

 

表示为00 41意味着采用了大端序(Big endian),而表示为41 00意味着采用了小端序。那么计算机如何知道存储的字符信息采用了大端序还是小端虚呢?这就需要加入一些控制信息,具体是采用大端序,则在文件前加入FE FF,采用小端序,则在文件前加入FF FE。这样,当计算开始读取时发现前两个字节为FE FF,就表示之后的信息采用的是小端序。

Unicode转UTF-16规则流程图如下:

 

UTF-32

UTF-32 是固定长度的编码,始终占用 4 个字节,足以容纳所有的 Unicode 字符,所以直接存储 Unicode 编号即可,不需要任何编码转换。浪费了空间,提高了效率。

Unicode编码一个具体的示意图:

从上图可以初步得出一些结论:

UTF-8与UTF-16都是变长编码,UTF-32则是定长编码。

码点到UTF-32的转换最简单,就是在前面垫0垫够4字节就行了。

码点到UTF-8的转换,除了最小那个在数值上一样外,其它两个完全看不出两者的关系。

码点到UTF-16的转换则是最微妙的,可以看出前两个字符UTF-16与码点是完全一致的,但那个大码点(准确地说是超过了U+FFFF的码点)则有了很大的变化,长度变成了四字节,值也变得很不一样了。

 

、字符编码在线查询

https://www.qqxiuzi.cn/bianma/zhongrihan.php

 

 

参考

https://hovertree.com/h/bjaf/edpe9q7g.htm

https://www.geek-share.com/detail/2620935446.html

https://www.pconline.com.cn/pcedu/empolder/gj/other/0505/616631.html

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 计算机开展史中计算机诞生时间的三个第一 世界上创造的第一台电子计算机 ENIA C 1946.2 美国 世界上第一台按存储程序控制功能设计的计算机 EDVA C 1946 1950 美国 世界上第一台投入运行的实现存储顺序控制功能的计算机 EDSA C 1947 1949.5 英国 2. 计算机开展的四个阶段和计算机时代的开场 计算机开展的分代按照不同的标准有不同的分法。 通常是按计算机中硬件所采用的电子逻辑器件划分成电子管、晶体管、中小规模集 成电路、大规模超大规模集成电路四个阶段; 也有一种观点把计算机的开展大致分为四个时期,即大型机时期、小型机时期、 PC 时期〔或客户 / 效劳器、 PC/ 效劳器〕时期和 Internet 或以网络为中心〕时期。 通常 所说的计算机时代 〞 从何时开场? 认为 1951 年,世界上第一台商品化批量消费的计算机 UNIVA C-I 投产,计算机从此从实验室走向社会,由单纯为军事效劳进入为社会公众效劳,被认为 是计算机时代的真正开场。 3. 计算机的特点 从计算机的特点理解计算机的定义,要清楚计算机的本质是一种信息处理机 计算机是一种可以输入信息,存储信息,并按照人们意志〔这些意志就是顺序〕对 信息进展加工处理,最后输出人们所需要信息的自动执行的电子装置。 计算机的特点:处置速度快、处置精度高、可存储、可进展逻辑判断、可靠性高、 通用性强。 4. 计算机的主要性能指标 主频、字长、存储容量、存取周期、运行速度。 运算速度是个综合性的指标, MIPS 含义。 影响运算速度的因素,主要是主频和存取周期,字长和存储容量也有影响。 正确理解 字长 概念。 5. 计算机的主要应用领域 科学计算 信息处置 过程控制 辅助系统 通信 6. 计算机中为什么要采用二进制及二进制的根本运算规那么 计算机中采用二进制是由计算机所使用的逻辑器件所决定。这种逻辑器件是具有两 种状态的电路〔触发器〕好处是 运算简单 实现方便 利息低 要清楚逻辑运算和算术运算规那么的不同。 7. 二进制数据与十进制、八进制、十六进制数据之间的转换 要求:这几种进位计数制的数据,一定要会互相转换。 清楚各种数制的表示。如: 1010BH 什么进制 的数?十六进制数,不要答成二进制数。 8. 计算机字符数据的表示方式 字符数据主要指西文的 A SCII 码和汉字,计算机内是用什么代码表示的 A SCII 码:用 7 位二进制数表示的或用一个字节表示,最高位为 0 这是事实上的国际标准。 汉字编码:用连续的两个字节表示,且规定最高位为 1 这是中国国家标准。 9. 存储容量和地址 存储容量是存储部件存储单元的总和; 地址是存储单元的编号。 要求: 知道地址线,会求寻址空间 知道存储容量和起始地址,会求末地址 难点: 地址总线,地址信号 寻址、寻址空间 存储容量和地址信号的关系 10. 存储顺序和程序控制原理 1945 年,冯 诺依曼提出的现代计算机的理论根底。现代计算机已经开展到第四代,但仍遵循着这个 原理。 存储顺序和程序控制原理的要点是顺序输入到计算机中,存储在内存储器中〔存储 原理〕运行时,控制器按地址顺序取出存放在内存储器中的指令〔按地址顺序访问指令 〕然后分析指令,执行指令的功能,遇到转移指令时,那么转移到转移地址,再按地址 顺序访问指令〔顺序控制〕 11. 指令和程序 指令是包括有操作码和地址码的一串二进制代码。其中操作码规定了操作的性质 什么样的操作 地址码表示了操作数和操作结果的存放地址。 顺序是为解决某一问题而设计的一系列排列有序的指令或语句〔顺序设计语言的语 句本质包括了一系列指令〕集合。 12. 计算机硬件的组成及各组成部分的功能 要理解以存储器为中心的计算机组成原理图 运算器:对信息和数据进展运算和加工处理,运算包括算术运算和逻辑运算。 控制器:实现计算机自身处置过程的自动化,指挥计算机各部件按照指令功能的要 求进展所需要的操作。 存储器:存储顺序和数据。 输入部件:输入顺序和数据。 输出部件:输出计算机的处置结果。 13. CPU 微处理器的概念 CPU 即中央处理单元,计算机的核心部件,包括了运算器和控制器两大部件 微处理器:微型机上使用的 CPU 利用大规模集成电路技术把运算器和控制器制作在一块集成电路中的芯片。 微型计算机:以微处理器为核心,加上用大规模集成电路做成的 RA M 和 ROM 存储芯片、输入输出接口芯片等组成的计算机计算机型号和 CPU 型号的关系: Intel80286 286 微机 Intel80386 386 微机 Intel80486 486 微机 14. 构成内存储器的半导体存储部件 RA M 和 ROM 特性 内存储器由两种半导体芯片构成。 RA M 随机存取存储器,也叫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值