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

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个特殊的可打印字符,如%、@和$。

在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。

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

对于以上的两个字符,我们都采用存储字节中的最高有效位作为奇偶校验位。对于偶校验来说,当字符编码中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就立刻重复发送数据,直到接收到正确的校验信息为止。如果反复尝试多次,数据传送仍有差错,可报告线路有故障。 ■

时间: 2024-08-18 15:59:24

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

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《机器学习与R语言(原书第2版)》一 第2章 数据的管理和理解

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.1节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 第2章 数据的管理和理解 任何机器学习项目初期的核心部分都是与管理和理解所收集的数据有关的.尽管你可能发现这些工作不像建立和部署模型那样令人有成就感(建立和部署模型阶段就开始看到了劳动的成果),但是忽视这些重要的准备工作是不明智的.任何学习算法的好坏取决于输入数据的好坏.

《机器学习与R语言(原书第2版)》一1.3 机器如何学习

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.3 机器如何学习 机器学习的一个正式定义是由计算机科学家Tom M. Mitchell提出的:如果机器能够获取经验并且能利用它们,在以后的类似经验中能够提高它的表现,这就称为机器学习.尽管这个定义是直观的,但是它完全忽略了经验如何转换成未来行动的过程,当然学习总是说起

《面向对象的思考过程(原书第4版)》一2.3 尽可能提供最小化的用户接口

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第2章,第2.3节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 尽可能提供最小化的用户接口 当设计类时,通用规则是尽量不要让用户知道类内部的工作原理.为了达到这点,请遵守以下简单的规则:只提供给用户绝对需要的东西.实际上,这意味着类的接口要尽可能少.当你开始设计一个类时,先从最小化的接口开始.类的设计是迭代式的,所以随后即使你发现

ROS机器人程序设计(原书第2版).

机器人设计与制作系列 ROS机器人程序设计 (原书第2版) Learning ROS for Robotics Programming,Second Edition 恩里克·费尔南德斯(Enrique Fernández) 路易斯·桑切斯·克雷斯波(Luis Sánchez Crespo) 阿尼尔·马哈塔尼(Anil Mahtani) 亚伦·马丁内斯(Aaron Martinez) 著 刘锦涛 张瑞雷 等译 图书在版编目(CIP)数据 ROS机器人程序设计(原书第2版) / (西)恩里克·费尔南

《JavaScript和jQuery实战手册(原书第3版)》---第1章 编写第一个JavaScript程序 1.1 编程简介

本节书摘来自华章出版社<JavaScript和jQuery实战手册(原书第3版)>一书中的第1章,第1.1节,作者David Sawyer McFarland,姚待艳 李占宣 译,更多章节内容可以访问"华章计算机"公众号查看. 第1章 编写第一个JavaScript程序 HTML自身并没有太多智能:它不能做数学运算,不能判断某人是否正确填写了一个表单,而且不能根据Web访问者的交互来做出判断.基本上,HTML让人们阅读文本.观看图片或视频,并且单击链接转向拥有更多文本.图片

《机器学习与R语言(原书第2版)》一2.3 探索和理解数据

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 探索和理解数据 在收集数据并把它们载入R数据结构以后,机器学习的下一个步骤是仔细检查数据.在这个步骤中,你将开始探索数据的特征和案例,并且找到数据的独特之处.你对数据的理解越深刻,你将会更好地让机器学习模型匹配你的学习问题. 理解数据探索的最好方法就是通过例子.在

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.7 创建透明材质

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.7节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.7 创建透明材质 到现在为止,我们见到的着色器都有一个共同点-都用在实心材质上.如果你想提升游戏视觉效果,某些时候透明材质是个不错的选择,比如火焰效果或者窗户玻璃等.透明材质的制作相对复杂一点.在渲染实心物体之前,Uni

《用户至上:用户研究方法与实践(原书第2版)》一1.1 什么是用户体验

本节书摘来自华章出版社<用户至上:用户研究方法与实践(原书第2版)>一书中的第1章,第1.1节,作者 Understanding Your Users: A Practical Guide to User Research Methods, Second Edition凯茜·巴克斯特(Kathy Baxter)[美]凯瑟琳·卡里奇(Catherine Courage) 凯莉·凯恩(Kelly Caine)更多章节内容可以访问"华章计算机"公众号查看. 第1章 用户体验入门

《机器学习与R语言(原书第2版)》一1.6 总结

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.6节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.6 总结 机器学习起源于统计学.数据库科学和计算机科学的交叉.它是一个强大的工具,能够在大量的数据中找到可行动的洞察.然而,人们仍需持谨慎的态度,避免现实生活中机器学习的普遍滥用. 从概念上讲,机器学习涉及把数据抽象为结构化表示,并把这个结构化表示进行一般化从而推广到