什么是ASCII码?
㈠定义
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的⼀套电脑编码系统,主要⽤于显⽰现代英语和其他西欧语⾔。它是最通⽤的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第⼀次以规范标准的类型发表是在1967年,最后⼀次更新则是在1986年,到⽬前为⽌共定义了128个字符。
㈡表达⽅式
★ASCII 码使⽤指定的7 位或8 位⼆进制数组合来表⽰128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使⽤7 位⼆进制数(剩下的1位⼆进制为0)来表⽰所有的⼤写和⼩写字母,数字0 到9、标点符号,以及在美式英语中使⽤的特殊控制字符。
★0~31及127(共33个)是控制字符或通信专⽤字符(其余为可显⽰字符)
①控制符:LF(换⾏)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等
②通信专⽤字符:SOH(⽂头)、EOT(⽂尾)、ACK(确认)等;
③ASCII值为8、9、10 和13 分别转换为退格、制表、换⾏和回车字符;
★32~126(共95个)是字符(32是空格),其中48~57为0到9⼗个阿拉伯数字。
★65~90为26个⼤写英⽂字母,97~122号为26个⼩写英⽂字母,其余为⼀些标点符号、运算符号等
★在标准ASCII中,其最⾼位(b7)⽤作奇偶校验位。
⑴所谓奇偶校验,是指在代码传送过程中⽤来检验是否出现错误的⼀种⽅法,⼀般分奇校验和偶校验两种。
⑵奇校验规定:正确的代码⼀个字节中1的个数必须是奇数,若⾮奇数,则在最⾼位b7添1;
⑶偶校验规定:正确的代码⼀个字节中1的个数必须是偶数,若⾮偶数,则在最⾼位b7添1;
㈢ASCII码表
㈣对控制字符的解释
⑴ASCII 编码中第 0~31 个字符(开头的 32 个字符)以及第 127 个字符(最后⼀个字符)都是不可见的(⽆法显⽰),但是它们都具有⼀些特殊功能,所以称为控制字符( Control Character)或者功能
码(Function Code)。
⑵下⾯列出了部分控制字符的具体功能:
★NUL (0)
①NULL,空字符。空字符起初本意可以看作为 NOP(中⽂意为空操作,就是啥都不做的意思),此位置可以忽略⼀个字符。
②之所以有这个空字符,主要是⽤于计算机早期的记录信息的纸带,此处留个 NUL 字符,意思是先占这个位置,以待后⽤,⽐如你哪天想起来了,在这个位置在放⼀个别的啥字符之类的。
③后来呢,NUL 被⽤于C语⾔中,表⽰字符串的结束,当⼀个字符串中间出现 NUL 时,就意味着这个是⼀个字符串的结尾了。这样就⽅便按照⾃⼰需求去定义字符串,多长都⾏,当然只要你内存放得下,然后最后加⼀个\0,即空字符,意思是当前字符串到此结束。
★SOH (1)
①Start Of Heading,标题开始。如果信息沟通交流主要以命令和消息的形式的话,SOH 就可以⽤于标记每个消息的开始。
②1963年,最开始 ASCII 标准中,把此字符定义为 Start of Message,后来⼜改为现在的 Start Of Heading。
③现在,这个 SOH 常见于主从(master-slave)模式的 RS232 的通信中,⼀个主设备,以 SOH 开头,和从设备进⾏通信。这样⽅便从设备在数据传输出现错误的时候,在下⼀次通信之前,去实现重新同步(resynchronize)。如果没有⼀个清晰的类似于 SOH 这样的标记,去标记每个命令的起始或开头的话,那么重新同步,就很难实现了。
★STX (2) 和 ETX (3)
①STX 表⽰ Start Of Text,意思是“⽂本开始”;ETX 表⽰ End Of Text,意思是“⽂本结束”。
ascii是几位二进制编码②通过某种通讯协议去传输的⼀个数据(包),称为⼀帧的话,常会包含⼀个帧头,包含了寻址信息,即你是要发给谁,要发送到⽬的地是哪⾥,其后跟着真正要发送的数据内容。
③⽽ STX,就⽤于标记这个数据内容的开始。接下来是要传输的数据,最后是 ETX,表明数据的结束。
④⽽中间具体传输的数据内容,ASCII 并没有去定义,它和你所⽤的传输协议有关。
★BEL (7)
①BELl,响铃。在 ASCII 编码中,BEL 是个⽐较有意思的东西。BEL ⽤⼀个可以听得见的声⾳来吸引⼈们的注意,既可以⽤于计算机,也可以⽤于周边设备(⽐如打印机)。
②注意,BEL 不是声卡或者喇叭发出的声⾳,⽽是蜂鸣器发出的声⾳,主要⽤于报警,⽐如硬件出现故障时就会听到这个声⾳,有的计算机操作系统正常启动也会听到这个声⾳。蜂鸣器没有直接安装到主板上,⽽是需要连接到主板上的⼀种外设,现代很多计算机都不安装蜂鸣器了,即使输出 BEL 也听不到声⾳,这个时候 BEL 就没有任何作⽤了。
★BS (8)
①BackSpace,退格键。退格键的功能,随着时间变化,意义也变得不同了。
②退格键起初的意思是,在打印机和电传打字机上,往回移动⼀格光标,以起到强调该字符的作⽤。⽐如你想要打印⼀个 a,然后加上退格键后,就成了 aBS^。在机械类打字机上,此⽅法能够起到实际的强调字符的作⽤,但是对于后来的 CTR 下时期来说,就⽆法起到对应效果了。
③⽽现代所⽤的退格键,不仅仅表⽰光标往回移动了⼀格,同时也删除了移动后该位置的字符。
★HT (9)
①Horizontal Tab,⽔平制表符,相当于 Table/Tab 键。
②⽔平制表符的作⽤是⽤于布局,它控制输出设备前进到下⼀个表格去处理。⽽制表符 Table/Tab 的宽度也是灵活不固定的,只不过在多数设备上制表符 Tab 都预定义为 4 个空格的宽度。
③⽔平制表符 HT 不仅能减少数据输⼊者的⼯作量,对于格式化好的⽂字来说,还能够减少存储空间,因为⼀个Tab键,就代替了 4 个空格。
★LF (10)
①Line Feed,直译为“给打印机等喂⼀⾏”,也就是“换⾏”的意思。LF 是 ASCII 编码中常被误⽤的字符之⼀。
②LF 的最原始的含义是,移动打印机的头到下⼀⾏。⽽另外⼀个 ASCII 字符,CR(Carriage Return)才是将打印机的头移到最左边,即⼀⾏的开始(⾏⾸)。很多串⼝协议和 MS-DOS 及 Windows 操作系统,也都是这么实现的。
③⽽C语⾔和 Unix 操作系统将 LF 的含义重新定义为“新⾏”,即 LF 和 CR 的组合效果,也就是回车且换⾏的意思。
④从程序的⾓度出发,C语⾔和 Unix 对 LF 的定义显得更加⾃然,⽽ MS-DOS 的实现更接近于 LF 的本意。
⑤现在⼈们常将 LF ⽤做“新⾏(newline)”的功能,⼤多数⽂本编辑软件也都可以处理单个 LF 或者 CR/LF 的组合了。
★VT (11)
①Vertical Tab,垂直制表符。它类似于⽔平制表符 Tab,⽬的是为了减少布局中的⼯作,同时也减少了格式化字符时所需要存储字符的空间。VT 控制符⽤于跳到下⼀个标记⾏。
②说实话,还真没看到有些地⽅需要⽤ VT,因为⼀般在换⾏的时候都是⽤ LF 代替 VT 了。
★FF (12)
①Form Feed,换页。设计换页键,是⽤来控制打印机⾏为的。当打印机收到此键码的时候,打印机移动到下⼀页。
②不同的设备的终端对此控制符所表现的⾏为各不同,有些会清除屏幕,有些只是显⽰^L字符,有些只是新换⼀⾏⽽已。例如,Unix/Linux 下的 Bash Shell 和 Tcsh 就把 FF 看做是⼀个清空屏幕的命令。
★CR (13)
①Carriage return,回车,表⽰机器的滑动部分(或者底座)返回。
②CR 回车的原意是让打印头回到左边界,并没有移动到下⼀⾏的意思。随着时间的流逝,后来⼈们把 CR 的意思弄成了 Enter 键,⽤于⽰意输⼊完毕。
③在数据以屏幕显⽰的情况下,⼈们按下 Enter 的同时,也希望把光标移动到下⼀⾏,因此C语⾔和 Unix 重新定义了 CR 的含义,将其表⽰为移动到下⼀⾏。当输⼊ CR 时,系统也常常隐式地将其转换为LF。
★SO (14) 和 SI (15)
①SO,Shift Out,不⽤切换;SI,Shift In,启⽤切换。
②早在 1960s 年代,设计 ASCII 编码的美国⼈就已经想到了,ASCII 编码不仅仅能⽤于英⽂,也要能⽤于外⽂字符集,这很重要,定义Shift In 和 Shift Out 正是考虑到了这点。
③最开始,其意为在西⾥尔语和拉丁语之间切换。西⾥尔语 ASCII(也即 KOI-7 编码)将 Shift 作为⼀个普通字符,⽽拉丁语 ASCII(也就是我们通常所说的 ASCII)⽤ Shift 去改变打印机的字体,它们完全是两种含义。
④在拉丁语 ASCII 中,SO ⽤于产⽣双倍宽度的字符(类似于全⾓),⽽⽤ SI 打印压缩的字体(类似于半⾓)。
★DLE (16)
①Data Link Escape,数据链路转义。
②有时候我们需要在通信过程中发送⼀些控制字符,但是总有⼀些情况下,这些控制字符被看成了普通的数据流,⽽没有起到对应的控制效果,ASCII 编码引⼊ DLE 来解决这类问题。
③如果数据流中检测到了 DLE,数据接收端会对数据流中接下来的字符另作处理。但是具体如何处理,ASCII 规范中并没有定义,只是弄了个 DLE 去打断正常的数据流,告诉接下来的数据要特殊对待。
★DC1 (17)
①Device Control 1,或者 XON – Transmission on。
②这个 ASCII 控制符尽管原先定义为 DC1,但是现在常表⽰为 XON,⽤于串⾏通信中的软件流控制。其主要作⽤为,在通信被控制符XOFF 中断之后,重新开始信息传输。
③⽤过串⾏终端的⼈应该还记得,当有时候数据出错了,按 Ctrl+Q(等价于XON)有时候可以起到重新传输的效果。这是因为,此 Ctrl+Q 键盘序列实际上就是产⽣ XON 控制符,它可以将那些由于终端或者主机⽅⾯,由于偶尔出现的错误的 XOFF 控制符⽽中断的通信解锁,使其正常通信。
★DC3 (19)
Device Control 3,或者 XOFF(Transmission off,传输中断)。
★EM (25)
①End of Medium,已到介质末端,介质存储已满。
②EM ⽤于,当数据存储到达串⾏存储介质末尾的时候,就像磁带或磁头滚动到介质末尾⼀样。其⽤于表述数据的逻辑终点,即不必⾮要是物理上的达到数据载体的末尾。
★FS(28)
①File Separator,⽂件分隔符。FS 是个很有意思的控制字符,它可以让我们看到 1960s 年代的计算机是如何组织的。
②我们现在习惯于随机访问⼀些存储介质,⽐如 RAM、磁盘等,但是在设计 ASCII 编码的那个年代,⼤部分数据还是顺序的、串⾏的,⽽不是随机访问的。此处所说的串⾏,不仅仅指的是串⾏通信,还指的是顺序存储介质,⽐如穿孔卡⽚、纸带、磁带等。
③在串⾏通信的时代,设计这么⼀个⽤于表⽰⽂件分隔的控制字符,⽤于分割两个单独的⽂件,是⼀件很明智的事情。
★GS(29)
①Group Separator,分组符。
②ASCII 定义控制字符的原因之⼀就是考虑到了数据存储。
③⼤部分情况下,数据库的建⽴都和表有关,表包含了多条记录。同⼀个表中的所有记录属于同⼀类型,不同的表中的记录属于不同的类型。
④⽽分组符 GS 就是⽤来分隔串⾏数据存储系统中的不同的组。值得注意的是,当时还没有使⽤ Excel 表格,ASCII 时代的⼈把它叫做组。
★RS(30)
Record Separator,记录分隔符,⽤于分隔⼀个组或表中的多条记录。
★US(31)
①Unit Separator,单元分隔符。
②在 ASCII 定义中,数据库中所存储的最⼩的数据项叫做单元(Unit)。⽽现在我们称其字段(Field)。单元分隔符 US ⽤于分割串⾏数据存储环境下的不同单元。
③现在的数据库实现都要求⼤部分类型都拥有固定的长度,尽管有时候可能⽤不到,但是对于每⼀个字段,却都要分配⾜够⼤的空间,⽤于存放最⼤可能的数据。
④这种做法的弊端就是占⽤了⼤量的存储空间,⽽ US 控制符允许字段具有可变的长度。在 1960s 年代,数据存储空间很有限,⽤ US 将不同单元分隔开,能节省很多空间。
★DEL (127)
①Delete,删除。
②有⼈也许会问,为何 ASCII 编码中其它控制字符的值都很⼩(即 0~31),⽽ DEL 的值却很⼤呢(为 127)?
③这是由于这个特殊的字符是为纸带⽽定义的。在那个年代,绝⼤多数的纸带都是⽤7个孔洞去编码数据的。⽽ 127 这个值所对应的⼆进制值为111 1111(所有 7 个⽐特位都是1),将 DEL ⽤在现存的纸带上时,所有的洞就都被穿孔了,就把已经存在的数据都擦除掉了,就起到了删除的作⽤。
㈤⼤⼩规则
常见ASCII码的⼤⼩规则:0~9<A~Z<a~z。
①数字⽐字母要⼩。如 “7”<“F”;
②数字0⽐数字9要⼩,并按0到9顺序递增。如 “3”<“8” ;
③字母A⽐字母Z要⼩,并按A到Z顺序递增。如“A”<“Z” ;
④同个字母的⼤写字母⽐⼩写字母要⼩32。如“A”<“a” 。
⑤⼏个常见字母的ASCII码⼤⼩: “A”为65;“a”为97;“0”为 48
㈥扩展ASCII(⾮ ASCII 编码)
⑴英语⽤128个符号编码就够了,但是⽤来表⽰其他语⾔,128个符号是不够的。⽐如,在法语中,字母上⽅有注⾳符号,它就⽆法⽤ ASCII 码表⽰。于是,⼀些欧洲国家就决定,利⽤字节中闲置的最⾼位编⼊新的符号。⽐如,法语中的é的编码为130(⼆进制10000010)。这样⼀来,这些欧洲国家使⽤的编码体系,可以表⽰最多256个符号。
⑵如图所⽰:扩展ASCII编码表
⑶但是,这⾥⼜出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使⽤256个符号的编码⽅式,代表的字母却不⼀样。⽐
如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中⼜会代表另⼀个符号。但是不管怎样,所有这些编码⽅式中,0--127表⽰的符号是⼀样的,不⼀样的只是128--255的这⼀段。
⑷⾄于亚洲国家的⽂字,使⽤的符号就更多了,汉字就多达10万左右。⼀个字节只能表⽰256种符号,肯定是不够的,就必须使⽤多个字节表达⼀个符号。⽐如,简体中⽂常见的编码⽅式是 GB2312,使⽤两个字节表⽰⼀个汉字,所以理论上最多可以表⽰ 256 x 256 = 65536 个符号。
㈦HTML ASCII
⑴HTML 和 XHTML ⽤标准的 7 ⽐特 ASCII 代码在⽹络上传输数据。
⑵7 ⽐特 ASCII 代码可提供 128 个不同的字符值。
⑶7 ⽐特可显⽰的 ASCII 代码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论