《逻辑与计算机设计基础(原书第5版)》——1.6 字符编码

简介: 本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.6节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.6 字符编码

计算机不仅要处理数字,还须处理字符信息,例如一家拥有成千上万投保客户的保险公司使用计算机处理它的文件。为了表示客户的姓名以及其他相关信息,必须采用一种二进制编码来表示字母表中的字母。而且,还需要一些二进制编码来表示数字以及其他特殊的字符,比如$。任何一种英语的字母数字字符集都包括10个十进制数字、26个字母以及一些(超过3个)其他特殊字符。如果只包含大写字母,我们需要至少6个二进制位进行编码,如果要包含大小写字母,则需要至少7个二进制位进行编码。在计算机中二进制编码是很重要的,因为计算机只能处理0和1组成的二进制数。二进制编码只改变了信息表示的符号,并不改变信息本身的意义。
1.6.1 ASCII字符编码
目前国际上采用的字母数字字符的标准编码称为ASCII(American Standard Code for Information Interchange,美国信息交换标准编码),如表1-5所示,它采用7位二进制编码,可表示128个字符。这7个二进制位,从低位到高位分别称为B1到B7,B7是最高位,高3位构成表中的列,低4位构成表中的行。比如,字母A的ASCII码为1000001(列为100,行为0001)。ASCII码包含94个可打印字符以及34个不可打印的控制字符。可打印字符包含了26个大写字母、26个小写字母、10个阿拉伯数字以及32个特殊的可打印字符,如%、@和$。
image
image

在ASCII字符表中34个控制字符用缩写表示,表下面给出一个控制字符的缩写与其全名的对应列表。控制字符用于控制数据的传送以及将要打印的文本转换为预定义的格式。控制字符按功能可分为3大类:格式控制符(format effector)、信息分隔符(information separator)以及通信控制字符(communication control character)。格式控制符用于控制打印格式与布局,它们有我们很熟悉的打字机控制字符如退格(BackSpace,BS)、水平制表(Horizontal Tabulation,HT)以及回车(Carriage Return,CR)。信息分隔符用于将数据分成不同的部分,比如段落或页,其中有记录分隔符(Record Separator,RS)和文件分隔符(File Separator,FS)。通信控制字符用于控制文本的传输,其中有文始符(Start of Text,STX)以及文终符(End of Text,ETX),它们都用于在文本的传输过程中控制传输数据帧(frame)的开始与结束。
ASCII码是7位二进制编码,但是绝大多数计算机的基本数据存储单元是8位,也称为1字节(byte)。这样,每个ASCII码在计算机中都占据1字节的存储单元,而字节的最高有效位则置为0。多余的这一位在不同的应用中可以有不同的用途。例如,当将字节的最高有效位置1时,可形成额外的128个8位的字符,有些打印机可以识别这些字符,这样,可以让这些打印机打出某些其他非英语字母,比如希腊字母或有音标的字母等。
使计算系统适应世界不同地区和不同语言被称为国际化(internationlization)或地区化(localization)。地区化的一个主要方面就是为各种语言中的字母和文字提供字符。ASCII是为英文字母开发的,即便将其扩充到8位,它也不可能支持世界范围内常用的其他字母和文字。许多年来,人们发明了很多不同的字符集,用来表示各种语言中所使用的文字以及不同专业领域使用的特殊技术和数学符号。这些字符集相互之间不兼容,例如,不同字符使用相同的数字,或者相同字符使用不同的数字。
统一码(Unicode,又称万国码、单一码—译者注)作为工业标准提供了一种统一的表示方式,可以用来表示世界上几乎所有语言中的字符与表意文字。通过对很多语言中的字符进行标准化的表示,统一码避免了从一种字符集到另一种字符集之间的切换,并消除了在不同字符集中使用相同数字而产生的冲突。统一码对每一个字符不仅规定了唯一的名字,而且规定了唯一的编号,叫做代码点(code point)。表示代码点常用的方法是在“U+”字符后加上那个代码点的4~6个十六进制数字。例如,U+0030是字符“0”,叫做数字零。统一码的前128个代码点,从U+0000~U+007F对应ASCII码字符。统一码目前支持全世界100种语言中的上百万的代码点。
有几种标准的对代码点进行编码的方法,编码长度从8~32位(1~4字节)。例如,UTF-8(UCS变换格式,UCS代表万用字符集(Universal Character Set))是一种变长的编码,对于每一个代码点,使用1~4字节;UTF-16是一种变长的编码,对于每一个代码点,使用2或4字节;而UTF-32是定长的,对于每一个代码点,使用4字节。表1-6给出了UTF-8使用的格式。右栏中的x是被编码的代码点的各个位,代码点的最低有效位位于UTF-8编码的最右边。如表中所示,前128个代码点用一个字节表示,这样可以使得ASCII码与UTF-8相兼容。因此,一个只含有ASCII字符的文件或字符串用ASCII码或UTF-8来表示是一样的。
在UTF-8中,多字节序列的字节数用第一个字节中位于最前面的1的个数来表示。合法的编码对每一个代码点必须使用最少的字节数。例如,对应ASCII码的前128个代码点中的任何一个,只能用一个字节,而不是序列中的某一个字节再加上代码点,代码点的左边有几个0。为了解释UTF-8编码,考虑几个例子。代码点U+0054,拉丁文大写字母T,“T”在U+0000 0000~U+0000 007F之间,所以它应该用一个字节来编码,其值为(01010100)2。代码点U+00B1,正-负号“±”在U+0000 0080~U+0000 07FF(原书为07FFF,原书有误—译者注)之间,所以它应该用两个字节来编码,其值为(11000010 10110001)2。
image

1.6.2 校验位
为了检测出数据传送过程中可能出现的错误,通常在二进制编码中额外加上一个校验位(parity bit),用于表示编码中1的个数是奇数还是偶数。下面是两个字符以及它们的奇校验(odd parity)和偶校验(even parity)的形式:
image

对于以上的两个字符,我们都采用存储字节中的最高有效位作为奇偶校验位。对于偶校验来说,当字符编码中1的个数为偶数时,校验位为0;对于奇校验来说,当字符编码中1的个数为奇数时,校验位为0。一般应用中只需要采用奇偶校验中的一种,偶校验用得更广泛。奇偶校验不仅可以用于二进制数字也可以用于编码,比如ASCII码,校验位可以是编码中某个固定的位。
例1-8 ASCII码的传输差错检测与修正
校验位对于检测信息传送中的差错很有用。假设我们采用偶校验,一个简单的差错检测过程是这样的:在7位ASCII码发送结束时,根据编码中的内容,产生1个校验位,这个校验位连同7位ASCII码一共8位一起被发送到接收端。在接收结束时,根据接收到的ASCII码,产生一个校验位,并将这个校验位与接收到的校验位进行比较,如果不相同,则说明在传输过程中编码中至少有一位发生了改变。这种方法可以检测字符传输过程中有1个、3个等任意奇数位发生的改变,但无法检测偶数个位发生改变的情况。某些其他的差错检测编码,采用额外的奇偶校验位来检测偶数个位发生的改变。发现差错后如何处理取决于不同的应用。如果差错是随机的且不会再发生,则一种可能的处理是请求数据重新传送。这样,当接收方检测到一个校验错误就立刻回送NAK(Negative Acknowledge)控制字符,该字符可以从表1-5得到,它是一个8位的偶校验码10010101。如果没有检测到数据错误,接收方就回送ACK(Acknowledge)控制字符,00000110。发送端收到NAK就立刻重复发送数据,直到接收到正确的校验信息为止。如果反复尝试多次,数据传送仍有差错,可报告线路有故障。 ■

相关文章
|
人工智能
《逻辑与计算机设计基础(原书第5版)》——3.6 编码
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第3章,第3.6节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1483 0
《逻辑与计算机设计基础(原书第5版)》——1.5 十进制编码
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.5节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
931 0
|
存储 容器
《逻辑与计算机设计基础(原书第5版)》——3.11 二进制加减法器
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第3章,第3.11节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2061 0
《逻辑与计算机设计基础(原书第5版)》——2.3 标准形式
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第2章,第2.3节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1425 0
《逻辑与计算机设计基础(原书第5版)》——2.2 布尔代数
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第2章,第2.2节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3256 0
《逻辑与计算机设计基础(原书第5版)》——2.11 本章小结
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第2章,第2.11节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
942 0
《逻辑与计算机设计基础(原书第5版)》——3.13 本章小结
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第3章,第3.13节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
910 0
《逻辑与计算机设计基础(原书第5版)》——1.8 本章小结
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.8节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1264 0
|
异构计算
《逻辑与计算机设计基础(原书第5版)》——导读
本书的目的是为广大读者提供学习逻辑设计、数字系统设计和计算机设计的基础知识。本书第5版突出了课程内容方面的最新发展。从1997年的第1版开始,作者就不断对其进行修改,提供一种独一无二的将逻辑设计与计算机设计原理结合在一起的方法,并特别强调硬件。
2661 0
《逻辑与计算机设计基础(原书第5版)》——1.3 数制
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.3节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1644 0