ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。
ASCII是编码系统的传统名称;互联网号码分配机构(IANA)更倾向于更新后的名称US-ASCII,这说明了该系统是在美国开发的,并基于主要在美国使用的印刷符号。
ASCII是美国电气和电子工程师协会里程碑之一。
ASCII是由电报代码发展而来的。它的第一个商业用途是作为贝尔数据服务公司推广的七位电传打字机代码。ASCII标准的工作始于1960年10月6日,美国标准协会(ASA)(现为美国国家标准协会或ANSI) X3.2小组委员会的第一次会议。该标准的第一版于1963年出版, 在1967年进行了重大修订,[1] 并在1986年进行了最新更新。 与早期的电报代码相比,建议的贝尔代码和ASCII都是为了更方便地对列表进行排序(即按字母顺序排列),并为电传打字机以外的设备增加了功能。
ASCII最初基于英语字母表,如上面的ASCII图表所示[2] 将128个指定字符编码成7位整数。95个编码字符是可打印的:数字0到9、小写字母A到Z、大写字母A到Z和标点符号。此外,最初的ASCII规范包括33个源自电传打字机的非打印控制代码;其中大部分现在已经过时,[3] 尽管仍有一些被普遍使用,例如回车、换行和制表符代码。
例如,小写I将在ASCII编码中用二进制1101001 =十六进制69 (i是第九个字母)=十进制105来表示。
美国信息交换标准代码(ASCII)是由美国标准协会(ASA)的一个委员会(称为X3委员会)及其X3.2(后来的X3L2)小组委员会以及该小组委员会的X3.2.4工作组(现在的INCITS)主持制定的。美国标准协会成为美国标准协会(USASI)[4] 并最终成为美国国家标准协会(ANSI)。
随着其他特殊字符和控制代码的填写,ASCII作为ASA X3.4-1963发布,[4][4] 保留28个没有任何指定含义的代码位置用于将来的标准化,以及一个未指定的控制代码。[4]当时有一些关于是否应该有更多的控制字符而不是小写字母的争论。[4] 很快就有了结论:1963年5月,CCITT新电报字母表工作组提议给 第6和第7列分配小写字符,[5] 和 国际标准化组织TC 97 SC 2在10月投票决定将这一变化纳入其标准草案。[6] X3.2.4工作组在1963年5月的会议上投票批准了对ASCII的修改。[7] 将小写字母定位在 第6和第7列中会导致字符的位模式与大写字母相差一位,这简化了不区分大小写的字符匹配以及键盘和打印机的构造。
X3委员会做了其他更改,包括其他新字符(大括号和竖线字符)、[8] 重命名一些控制字符(SOM成为报头开始符(SOH))以及更改字符位置或删除其他字符(RU被删除)。[4]ASCII随后更新为USAS X3.4-1967,[9][9] 然后是USAS X3.4-1968,ANSI X3.4-1977,最后是ANSI X3.4-1986。[10][10]
ASCII标准的修订:
在X3.15标准中,X3委员会还讨论了如何传输ASCII码(最低有效位优先),[4][14] 以及如何将其记录在穿孔带上。他们提出了磁带的9磁道标准,并试图处理一些穿孔卡格式。
X3.2小组委员会根据早期电传打字机编码系统设计了ASCII码。像其他字符编码一样,ASCII指定数字位模式和字符符号(即图形和控制字符)之间的对应关系。这允许数字设备相互通信,并处理、存储和通信面向字符的信息,例如书面语言。在ASCII开发之前,使用的编码包括26个字母字符、10个数字和11到25个特殊图形符号。为了包括所有这些以及与1924年国际电报字母2 (ITA2)标准,[15][16]FIELDATA (1956)和早期EBCDIC (1963)兼容的控制字符,ASCII需要超过64个代码。
ITA2反过来基于1870年发明并于1874年获得专利的5位电报代码mile Baudot。[16]
委员会讨论了移位功能(如ITA2)的可能性,该功能将允许一个6位代码代表64个以上的代码。在移位代码中,一些字符代码决定下列字符代码的选项之间的选择。它允许紧凑编码,但数据传输不太可靠,因为传输移位码时的错误通常会使传输的大部分不可读。标准委员会决定不移位,因此ASCII至少需要一个7位代码。[17]
委员会考虑了8位编码,因为8位(八位字节)允许两个4位模式用二进制编码的十进制有效地编码两位数。然而,当7位足够时,它将要求所有数据传输发送8位。委员会投票决定使用一个七位代码来最小化与数据传输相关的成本。由于穿孔带当时可以在一个位置记录八位,如果需要,它还允许奇偶校验位进行错误检查。[17]不使用奇偶校验的Eight-bit机器(以八位字节作为本机数据类型)通常将第八位设置为0。[17] 在某些打印机中,高位用于启用斜体打印。
为了便于识别,代码本身被图案化,使得大多数控制代码在一起,所有图形代码在一起。前两个所谓的ASCII列[18](共32个位置)是为控制字符保留的。[17] “空格”字符必须出现在图形之前,以便于排序,因此它变成了20(十六进制);[17] 出于同样的原因,许多常用作分隔符的特殊符号被放在数字之前。委员会决定支持大写64个字符的字母是很重要的,并选择了ASCII码模式,这样就可以很容易地将其简化为一组可用的64个字符的图形代码,[17] 就像在DEC六位代码(1963)中所做的那样。因此小写字母不会与大写字母交错。为了保持小写字母和其他图形的选项可用,特殊和数字代码被排列在字母之前,字母A被放置在41(十六进制)位置,以匹配相应的英国标准草案。[17] 数字0–9以011为前缀,但剩余的4位对应于它们各自的二进制值,使得用二进制编码的十进制进行转换变得简单明了。
许多非字母数字字符的位置与它们在打字机上的移动位置相对应;一个重要的微妙之处是这些是基于机械打字机,而不是电动打字机。[18] 机械打字机遵循Remington No. 2(1878)设定的标准,第一台带移位键的打字机,字符23456789-对应的移位值为字符“# % _ & '() – 早期的打字机省略了0和1,取而代之的是0(大写字母O)和L(小写字母L),但是一旦0和1变得常见,1!和0)的配对就成为标准。因此,在ASCII中!" #$%放在第二个列上,[18] 位置1–5,对应于相邻列上的数字1–5。[18] 然而,括号不能对应于9和0,因为对应于0的位置被空格字符占据。这是通过从第6列中去掉_(下划线)并移动剩余字符来实现的,这与许多欧洲打字机将括号与8和9放在一起相符。打字机的这种差异导致了位对键盘,特别是电传打字机33型,它使用了对应于ASCII码的左移布局,而不是传统的机械打字机。电动打字机,特别是IBM Selectric (1961),使用了一种稍微不同的布局,这种布局已经成为计算机的标准——遵循了IBM PC (1981),尤其是Model M (1984)——因此现代键盘上符号的移位值不像早期键盘那样与ASCII表紧密对应。/?配对还可以追溯到Remington No. 2,一些键盘也采用了,< .>配对 (其他键盘,包括Remington No. 2,不移动,(逗号)或.(句号)的位置,因此它们可以大写形式使用,而不需要松开shift键)。然而,ASCII将;:配对(可追溯到Remington No. 2),并将数学符号重新排列(许多惯例,通常是-* =+)为:* ;+ -=。
一些常见字符没有包括在内,特别是 ½¼¢
, ^`~
作为国际通用的音调符号,<>作为数学使用,以及简单的直线字符\|(除了常见的/)。@符号在欧洲大陆并未使用,委员会预计它将被法语变体中的重音à所取代,因此@被置于40(十六进制)位置,就在字母A之前[17]
控制代码对于数据传输来说是必不可少的,它们是消息开始符(SOM)、地址结束符(EOA)、消息结束符(EOM)、传输结束符(EOT),“你是谁?”(WRU)“是你吗?”(RU)、保留设备控制符(DC0)、同步空闲符(SYNC)和确认符(ACK)。这些被定位成最大化它们的比特模式之间的汉明距离。[17]
ASCII码顺序也称为字母顺序。[19] 数据的整理有时是按这个顺序进行的,而不是按“标准”字母顺序(整理顺序)。ASCII顺序的主要偏差是:
所有大写在小写字母之前;例如,“Z”在“a”之前
数字和许多标点符号出现在字母之前
在比较ASCII值之前,中间顺序将大写字母转换为小写字母。
ASCII为控制字符保留前32个代码(十进制数字0-31):代码最初不是用来表示可打印的信息,而是用来控制使用ASCII的设备(如打印机),或提供数据流的元信息,如存储在磁带上的数据流。
例如,字符10代表“换行”功能(这使打印机推进纸张),字符8代表“退格”。RFC 2822将不包括回车、换行符或空格的控制字符称为非空白控制字符。[20] 除了规定基本的面向行格式的控制字符之外,ASCII没有定义任何机制来描述文档中文本的结构或外观。其他方案,如标记语言、地址页和文档布局和格式。
最初的ASCII标准只对每个控制字符使用简短的描述性短语。这造成的歧义有时是有意的,例如,字符在终端链路上的使用与数据流上的使用略有不同,有时是偶然的,例如,某些字符带有“删除”的含义。
可能对解释这些字符最有影响的单一设备是电传打字机33 ASR,这是一种带有可用纸带阅读器/穿孔选项的打印终端。直到20世纪80年代,纸带一直是一种非常受欢迎的长期程序存储介质,比磁带便宜,在某些方面也不那么脆弱。特别是,电传打字机型号33为代码17(Control-Q,DC1,也称为XON),19(Control-S,DC3,也称为XOFF)和127(删除符)的机器分配成为事实上的标准。型号33也因从字面上理解Control-G(代码7,BEL,意思是听觉上警告操作员)的描述而引人注目,因为该单元包含一个实际的铃声,当它接收到BEL字符时会响。因为O键的键顶也显示了一个左箭头符号(来自ASCII-1963,它有这个字符而不是下划线),被解释为“删除先前的字符”的代码15(Control-O,转换符)的不合规使用也被许多早期分时系统采用,但最终被忽略了。
当装有自动纸带阅读机的电传打字机33收到一个控制信号Control-S(XOFF,是传输关闭的缩写)时,它使纸带阅读机停止工作;接收Control-Q (XON,“传输开始”)使磁带读取器恢复。这种技术被一些早期的计算机操作系统采用,作为“握手”信号,警告发送者由于即将溢出而停止传输;它作为一种手动输出控制技术在许多系统中一直持续到今天。在某些系统上,Control-S保留其含义,但是Control-Q被第二个Control-S代替以恢复输出。33 ASR还可以配置为使用Control-R (DC2)和Control-T (DC4)来启动和停止打孔机;在一些配备此功能的设备上,字母上方键帽上相应的控制字符字母分别是TAPE和 TAPE 。[21]
电传打字机不能向后移动头部,所以它没有在键盘上放一个键来发送BS(退格)。相反,有一个标记为RUB OUT的密钥发送代码127 (DEL)。这个键的目的是清除手打纸带中的错误:操作者必须按下纸带穿孔机上的一个按钮来回退它,然后键入rubout,它会穿孔所有的孔并用一个想要忽略的字符替换错误。[22] DEC视频终端(默认情况下)为标记为“退格”的键发送DEL代码,而标记为“删除”的键发送转义序列,而许多其他终端为退格键发送BS。Unix终端驱动程序只能使用一个代码进行回退,这可以设置为BS或DEL,但不能同时设置为这两者,这会导致很长一段时间的烦恼,在这段时间里,您必须根据所使用的终端进行纠正(允许行编辑的shell,如ksh、bash和zsh,两者都能识别)。假设没有密钥发送BS将会导致Control+H被用于其他目的,例如GNU Emacs中的“帮助”前缀命令。[23]
更多的控制代码被赋予了与其原始代码完全不同的含义。例如,“转义”字符(ESC,代码27)最初旨在允许将其他控制字符作为文字发送,而不是调用它们的含义。这与在网址编码、C语言字符串以及某些字符具有保留含义的其他系统中遇到的“转义”的含义相同。随着时间的推移,这个意思被增选,并最终改变了。在现代使用中,发送到终端的ESC通常表示命令序列的开始,通常以ECMA-48 (1972)及其后继者的所谓“ANSI转义码”(或者更准确地说,“控制序列导入器”)的形式出现,以ESC后跟一个“字符,Windows从MS-DOS继承了这种控制代码”。
许多控制字符固有的模糊性,加上它们的历史用法,在系统之间传输“纯文本”文件时产生了问题。这方面最好的例子是新行各种问题 操作系统s.电传打字机要求一行文本以“回车”(将打印头移动到行的开头)和“换行”(不移动打印头就将纸张前进一行)结束。“回车”这个名字来源于这样一个事实打字机当打字杆击打色带的位置保持不动时,保持纸张的托架移动。为了将纸张的左边距定位到下一行,必须将整个托架推到(返回)右边。
十二月操作系统(OS/8, RT-11, RSX-11, RSTS, TOPS-10等等)使用这两个字符来标记行尾,以便控制台设备(最初电传打字机)会起作用。当所谓的“玻璃TTYs”(后来被称为CRt或终端)出现时,该公约已经确立,向后兼容性要求继续该公约。当...的时候加里·基尔代尔创造CP/M他受到了中使用的一些命令行界面约定的启发 十二月s RT-11。直到引入个人电脑操作系统1981年, 美国国际商用机器公司 这与他们无关,因为他们70年代的操作系统使用EBCDIC而不是ASCII,并且他们面向穿孔卡片输入和行打印机输出,在这些方面回车的概念毫无意义。IBM的个人电脑操作系统(也称为监督事务司微软)继承了这一惯例,因为它松散地基于CP/M,[24] 和窗子从监督事务司继承下来的。
不幸的是,要求用两个字符来标记一行的结尾会带来不必要的复杂性,以及当单独遇到每个字符时如何解释的问题。为了简化事务,多机种上的纯文本数据流(包括文件)仅使用换行作为行终止符。Unix和类似Unix的系统,以及Amigasystems,从Multics中采用了这个约定。另一方面,最初的Macintosh操作系统、苹果操作系统和ProDOS,单独使用回车作为行终止符;然而,由于苹果用基于Unix的苹果操作系统取代了这些操作系统,他们现在也使用换行(LF) 。TRS-80电台也使用一个单独的呼叫应答器来终止线路。
连接到ARPANET的计算机包括运行TOPS-10和TENEX操作系统使用CR-LF作为行终止符的机器,运行Multics操作系统使用LF作为行终止符的机器,运行OS/360操作系统的机器,它将行表示为字符计数,后跟行内的字符,并使用EBCDIC而不是ASCII。远程登录协议定义了一个ASCII“网络虚拟终端”(NVT),以便通过网络传输标准文本格式来支持具有不同行尾约定和字符集的主机之间的连接。Telnet使用了ASCII和CR-LF行尾,使用其他约定的软件将在本地约定和NVT之间进行翻译。[25] 文件传输协议采用远程登录协议,包括使用网络虚拟终端,用于在默认的ASCII模式下传输命令和数据。[26][27] 这增加了这些协议以及其他网络协议(例如,用于电子邮件和万维网的协议)在不使用NVT的CR-LF线路结束约定的系统上的实现的复杂性。[28][29]
PDP-6监视器,[30] 及其PDP-10后继TOPS-10[31] 使用Control-Z(SUB)作为终端输入的文件结束符。一些操作系统,如CP/M,只以磁盘块为单位跟踪文件长度,并使用Control-Z来标记文件中实际文本的结尾。[32]由于这些原因,EOF,或文件结尾符,在口语和习惯上被用作Control-Z的三个字母的首字母缩略词,而不是替代词。文本结束代码(ETX),也称为Control-C,由于各种原因不合适作为文件结尾,而使用Z作为结束文件的控件代码类似于Z是字母表的结尾,是非常方便的助记符。一个历史上常见且仍然流行的惯例是使用ETX代码惯例通过输入数据流中断和停止程序,通常是通过键盘输入。
在C库和Unix规定中,空字符用于终止文本字符串;这种以零结尾的字符串可以缩写为ASCIZ或ASCIIZ,这里Z代表“零”。
二进制 | 八进制 | 十进制 | 十六进制 | 缩写 | 名称(1967年) | ||
---|---|---|---|---|---|---|---|
1963 | 1965 | 1967 | |||||
000 0000 | 000 | 0 | 00 | NULL | NUL | Null | |
000 0001 | 001 | 1 | 01 | SOM | SOH | 报头开始符 | |
000 0010 | 002 | 2 | 02 | EOA | STX | 正文开始 | |
000 0011 | 003 | 3 | 03 | EOM | ETX | 文本结束 | |
000 0100 | 004 | 4 | 04 | EOT | 传输结束符 | ||
000 0101 | 005 | 5 | 05 | WRU | ENQ | 请求 | |
000 0110 | 006 | 6 | 06 | RU | ACK | 收到通知 | |
000 0111 | 007 | 7 | 07 | BELL | BEL | 响铃 | |
000 1000 | 010 | 8 | 08 | FE0 | BS | 退格 | |
000 1001 | 011 | 9 | 09 | HT/SK | HT | 水平制表符 | |
000 1010 | 012 | 10 | 0A | LF | 换行 | ||
000 1011 | 013 | 11 | 0B | VTAB | VT | 垂直制表符 | |
000 1100 | 014 | 12 | 0C | FF | 换页 | ||
000 1101 | 015 | 13 | 0D | CR | 回车 | ||
000 1110 | 016 | 14 | 0E | SO | 禁用切换 | ||
000 1111 | 017 | 15 | 0F | SI | 启用切换 | ||
001 0000 | 020 | 16 | 10 | DC0 | DLE | 数据链接转义 | |
001 0001 | 021 | 17 | 11 | DC1 | 设备控制1(通常是XON) | ||
001 0010 | 022 | 18 | 12 | DC2 | 设备控制2 | ||
001 0011 | 023 | 19 | 13 | DC3 | 设备控制3(通常为XOFF) | ||
001 0100 | 024 | 20 | 14 | DC4 | 设备控制4 | ||
001 0101 | 025 | 21 | 15 | ERR | NAK | 拒绝接收 | |
001 0110 | 026 | 22 | 16 | SYNC | SYN | 同步空闲 | |
001 0111 | 027 | 23 | 17 | LEM | ETB | 传输块结束字符 | |
001 1000 | 030 | 24 | 18 | S0 | CAN | 取消 | |
001 1001 | 031 | 25 | 19 | S1 | EM | 媒体结尾 | |
001 1010 | 032 | 26 | 1A | S2 | SS | SUB | 代替 |
001 1011 | 033 | 27 | 1B | S3 | ESC | 换码 | |
001 1100 | 034 | 28 | 1C | S4 | FS | 文件分隔符 | |
001 1101 | 035 | 29 | 1D | S5 | GS | 分组分隔符 | |
001 1110 | 036 | 30 | 1E | S6 | RS | 记录分隔符 | |
001 1111 | 037 | 31 | 1F | S7 | US | 单元分隔符 | |
111 1111 | 177 | 127 | 7F | DEL | 删除 |
专业设备可能会使用其他表示,例如ISO 2047图形或十六进制数字。
代码20(十六进制)到7E(十六进制),被称为可打印字符,代表字母、数字、标点符号和一些其他符号。总共有95个可打印字符。
代码20(十六进制),“空格”字符表示单词之间的空格,由键盘的空格键产生。由于空格字符被认为是不可见的图形(而不是控制字符)[33][33] 它被列在下表中,而不是上一节中。
代码7F(十六进制)对应于不可打印的“删除”(DEL)控制字符,因此在此图表中被省略;上一节的图表中已经介绍过了。早期版本的ASCII使用向上箭头代替插入符号(5E(十六进制)),使用向左箭头代替下划线(5F(十六进制))。[34][34]
二进制 | 八进制 | 十进制 | 十六进制 | 符号 | ||
---|---|---|---|---|---|---|
1963 | 1965 | 1967 | ||||
010 0000 | 040 | 32 | 20 | 空格 | ||
010 0001 | 041 | 33 | 21 | ! | ||
010 0010 | 042 | 34 | 22 | " | ||
010 0011 | 043 | 35 | 23 | # | ||
010 0100 | 044 | 36 | 24 | $ | ||
010 0101 | 045 | 37 | 25 | % | ||
010 0110 | 046 | 38 | 26 | & | ||
010 0111 | 047 | 39 | 27 | ' | ||
010 1000 | 050 | 40 | 28 | ( | ||
010 1001 | 051 | 41 | 29 | ) | ||
010 1010 | 052 | 42 | 2A | * | ||
010 1011 | 053 | 43 | 2B | + | ||
010 1100 | 054 | 44 | 2C | , | ||
010 1101 | 055 | 45 | 2D | - | ||
010 1110 | 056 | 46 | 2E | . | ||
010 1111 | 057 | 47 | 2F | / | ||
011 0000 | 060 | 48 | 30 | 0 | ||
011 0001 | 061 | 49 | 31 | 1 | ||
011 0010 | 062 | 50 | 32 | 2 | ||
011 0011 | 063 | 51 | 33 | 3 | ||
011 0100 | 064 | 52 | 34 | 4 | ||
011 0101 | 065 | 53 | 35 | 5 | ||
011 0110 | 066 | 54 | 36 | 6 | ||
011 0111 | 067 | 55 | 37 | 7 | ||
011 1000 | 070 | 56 | 38 | 8 | ||
011 1001 | 071 | 57 | 39 | 9 | ||
011 1010 | 072 | 58 | 3A | : | ||
011 1011 | 073 | 59 | 3B | ; | ||
011 1100 | 074 | 60 | 3C | < | ||
011 1101 | 075 | 61 | 3D | = | ||
011 1110 | 076 | 62 | 3E | > | ||
011 1111 | 077 | 63 | 3F | ? | ||
100 0000 | 100 | 64 | 40 | @ | ` | @ |
100 0001 | 101 | 65 | 41 | A | ||
100 0010 | 102 | 66 | 42 | B | ||
100 0011 | 103 | 67 | 43 | C | ||
100 0100 | 104 | 68 | 44 | D | ||
100 0101 | 105 | 69 | 45 | E | ||
100 0110 | 106 | 70 | 46 | F | ||
100 0111 | 107 | 71 | 47 | G | ||
100 1000 | 110 | 72 | 48 | H | ||
100 1001 | 111 | 73 | 49 | I | ||
100 1010 | 112 | 74 | 4A | J | ||
100 1011 | 113 | 75 | 4B | K | ||
100 1100 | 114 | 76 | 4C | L | ||
100 1101 | 115 | 77 | 4D | M | ||
100 1110 | 116 | 78 | 4E | N | ||
100 1111 | 117 | 79 | 4F | O | ||
101 0000 | 120 | 80 | 50 | P | ||
101 0001 | 121 | 81 | 51 | Q | ||
101 0010 | 122 | 82 | 52 | R | ||
101 0011 | 123 | 83 | 53 | S | ||
101 0100 | 124 | 84 | 54 | T | ||
101 0101 | 125 | 85 | 55 | U | ||
101 0110 | 126 | 86 | 56 | V | ||
101 0111 | 127 | 87 | 57 | W | ||
101 1000 | 130 | 88 | 58 | X | ||
101 1001 | 131 | 89 | 59 | Y | ||
101 1010 | 132 | 90 | 5A | Z | ||
101 1011 | 133 | 91 | 5B | [ | ||
101 1100 | 134 | 92 | 5C | \ | ~ | \ |
101 1101 | 135 | 93 | 5D | ] | ||
101 1110 | 136 | 94 | 5E | ↑ | ^ | |
101 1111 | 137 | 95 | 5F | ← | _ | |
110 0000 | 140 | 96 | 60 | @ | ` | |
110 0001 | 141 | 97 | 61 | a | ||
110 0010 | 142 | 98 | 62 | b | ||
110 0011 | 143 | 99 | 63 | c | ||
110 0100 | 144 | 100 | 64 | d | ||
110 0101 | 145 | 101 | 65 | e | ||
110 0110 | 146 | 102 | 66 | f | ||
110 0111 | 147 | 103 | 67 | g | ||
110 1000 | 150 | 104 | 68 | h | ||
110 1001 | 151 | 105 | 69 | i | ||
110 1010 | 152 | 106 | 6A | j | ||
110 1011 | 153 | 107 | 6B | k | ||
110 1100 | 154 | 108 | 6C | l | ||
110 1101 | 155 | 109 | 6D | m | ||
110 1110 | 156 | 110 | 6E | n | ||
110 1111 | 157 | 111 | 6F | o | ||
111 0000 | 160 | 112 | 70 | p | ||
111 0001 | 161 | 113 | 71 | q | ||
111 0010 | 162 | 114 | 72 | r | ||
111 0011 | 163 | 115 | 73 | s | ||
111 0100 | 164 | 116 | 74 | t | ||
111 0101 | 165 | 117 | 75 | u | ||
111 0110 | 166 | 118 | 76 | v | ||
111 0111 | 167 | 119 | 77 | w | ||
111 1000 | 170 | 120 | 78 | x | ||
111 1001 | 171 | 121 | 79 | y | ||
111 1010 | 172 | 122 | 7A | z | ||
111 1011 | 173 | 123 | 7B | { | ||
111 1100 | 174 | 124 | 7C | ACK | ¬ | | |
111 1101 | 175 | 125 | 7D | } | ||
111 1110 | 176 | 126 | 7E | ESC | | | ~ |
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 0 |
NUL 0000 |
SOH 0001 |
STX 0002 |
ETX 0003 |
EOT 0004 |
ENQ 0005 |
ACK 0006 |
BEL 0007 |
BS 0008 |
HT 0009 |
LF 000A |
VT 000B |
FF 000C |
CR 000D |
SO 000E |
SI 000F |
1_ 16 |
DLE 0010 |
DC1 0011 |
DC2 0012 |
DC3 0013 |
DC4 0014 |
NAK 0015 |
SYN 0016 |
ETB 0017 |
CAN 0018 |
EM 0019 |
SUB 001A |
ESC 001B |
FS 001C |
GS 001D |
RS 001E |
US 001F |
2_ 32 |
SP 0020 |
! 0021 |
" 0022 |
# 0023 |
$ 0024 |
% 0025 |
& 0026 |
' 0027 |
( 0028 |
) 0029 |
* 002A |
+ 002B |
, 002C |
- 002D |
. 002E |
/ 002F |
3_ 48 |
0 0030 |
1 0031 |
2 0032 |
3 0033 |
4 0034 |
5 0035 |
6 0036 |
7 0037 |
8 0038 |
9 0039 |
: 003A |
; 003B |
< 003C |
= 003D |
> 003E |
? 003F |
4_ 64 |
@ 0040 |
A 0041 |
B 0042 |
C 0043 |
D 0044 |
E 0045 |
F 0046 |
G 0047 |
H 0048 |
I 0049 |
J 004A |
K 004B |
L 004C |
M 004D |
N 004E |
O 004F |
5_ 80 |
P 0050 |
Q 0051 |
R 0052 |
S 0053 |
T 0054 |
U 0055 |
V 0056 |
W 0057 |
X 0058 |
Y 0059 |
Z 005A |
[ 005B |
\ 005C |
] 005D |
^ 005E |
_ 005F |
6_ 96 |
` 0060 |
a 0061 |
b 0062 |
c 0063 |
d 0064 |
e 0065 |
f 0066 |
g 0067 |
h 0068 |
i 0069 |
j 006A |
k 006B |
l 006C |
m 006D |
n 006E |
o 006F |
7_ 112 |
p 0070 |
q 0071 |
r 0072 |
s 0073 |
t 0074 |
u 0075 |
v 0076 |
w 0077 |
x 0078 |
y 0079 |
z 007A |
{ 007B |
| 007C |
} 007D |
~ 007E |
DEL 007F |
Letter Number Punctuation Symbol Other undefined Changed from 1963 version
ASCII在1963年首次作为美国电话电报公司TWX(电传打字机交换)网络的7位电传打字机代码在商业上使用。TWX最初使用的是早期的五位ITA2,竞争对手的电传电传打字机系统也使用了它。鲍勃·贝默介绍了逃逸序列等特性。[35] 他的英国同事休·麦格雷戈·罗斯(Hugh McGregor Ross)帮助推广了这项工作——根据贝默的说法,“罗斯做了很多以至于后来ASCII最初在欧洲被称为贝默-罗斯代码”。[35] 由于他在ASCII方面的广泛工作,贝默被称为“ASCII之父”。[36]
1968年3月11日,美国总统林登·约翰逊要求美国联邦政府购买的所有计算机都支持ASCII,声明:[37][38][39]
我亦已批准商务部长就在电脑操作中使用磁带及纸带记录信息交换标准代码的标准所提出的建议。1969年7月1日及之后纳入联邦政府库存的所有计算机和相关设备配置,必须在使用磁带和纸带时能够使用信息交换标准代码以及磁带和纸带标准规定的格式。
ASCII是万维网上最常见的字符编码,直到2007年12月UTF-8编码超过它;UTF-8与ASCII向后兼容。[40][41]
随着计算机技术在全世界的传播,不同的标准机构和公司开发了许多不同的ASCII码,以方便使用罗马字母的非英语语言的表达。人们可以将这些变体中的一些归类为“ASCII扩展”,尽管有些人误用该术语来表示所有变体,包括那些不在7位范围内保留ASCII字符映射的变体。此外,ASCII扩展也被误标为ASCII。
从其发展的早期开始,[42] ASCII只是国际字符编码标准的几个国家变体之一。
其他国际标准机构已经批准了字符编码,如与ASCII相同或几乎相同的ISO 646 (1967),扩展了英语字母表以外的字符和美国以外使用的符号,如英国英镑的符号(£)。几乎每个国家都需要一个改编版的ASCII,因为ASCII只适合美国和其他几个国家的需要。例如,加拿大有自己的支持法语字符的版本。
许多其他国家发展了ASCII的变体,以包括非英文字母(例如é, ñ, ß, Ł,等)、货币符号(例如£, ¥等)。
它共享大多数共同的字符,但是将其他本地有用的字符分配给为“国家使用”保留的几个代码点。然而,从公布ASCII-1963到1967年国际标准化组织第一次接受国际建议之间的四年[43] 过去了,使得ASCII对国家使用字符的选择似乎是世界实际的标准,一旦其他国家开始对这些代码点进行分配,就会造成混乱和不兼容。
与ASCII一样,ISO/IEC 646是一个7位字符集。它不提供任何额外的代码,所以相同的代码点在不同的国家编码不同的字符。转义码被定义为指示哪种国家变体适用于一段文本,但是它们很少被使用,因此通常不可能知道使用哪种变体以及代码代表哪个字符,并且一般来说,文本处理系统只能处理一种变体。
因为ASCII的方括号和括号字符被分配给“国家使用”代码点,这些代码点用于ISO/IEC 646、德国、法国或瑞典等其他国家变体中的重音字母。使用他们国家版本的ISO/IEC 646,而不是美国标准信息交换标准的程序员,必须写一些东西,因此还要读一些东西,例如
ä aÄiÜ = 'Ön'; ü
而不是
{ a[i] = '\n'; }
创建三元组是为了解决ANSI C的这个问题,尽管它们的后期引入和编译器中不一致的实现限制了它们的使用。许多程序员把他们的计算机保存在美国ASCII码上,所以对瑞典语、德语等采用纯文本格式。(例如,在电子邮件或Usenet中)在单词中间包含“{、}”和类似的变体,这是程序员已经习惯的。例如,一个瑞典程序员给另一个程序员发邮件,询问他们是否应该去吃午饭,可以得到“"Nä jag har smörgåsar”的答案,意思是“No I've got sandwiches”。
最终,随着8位、16位和32位(以及后来的64位)计算机开始取代12位、18位和36位计算机成为常态,使用8位字节将每个字符存储在内存中变得很普遍,为扩展的8位ASCII扩展提供了机会。在大多数情况下,这些都是作为ASCII的真正扩展而开发的,保留了原始的字符映射,但是在前128个(即7位)字符之后添加了额外的字符定义。
编码包括ISCII(印度), VISCII(越南)。虽然这些编码有时被称为ASCII,但真正的ASCII仅由ANSI标准严格定义。
大多数早期的家用计算机系统都开发了自己的8位字符集,其中包含画线和游戏字形,并且经常用更多的图形填充0到31之间的一些或所有控制字符。凯普罗电脑公司的电脑使用希腊字母的“大写”128个字符。
在1970年后的代码中,用于8位系统的PETSCII代码Commodore International可能是唯一的,因为它是基于ASCII-1963,而不是更常见的ASCII-1967,例如在ZX频谱计算机上就采用了这种代码。Atari 8位计算机和Galaksija计算机也使用ASCII变体。
IBM个人电脑定义了代码页437,用笑脸等图形符号代替控制字符,并将附加图形字符映射到上面的128个位置。像DOS这样的操作系统支持这些代码页,而IBM个人电脑的制造商用硬件支持它们。数字设备公司开发了用于流行的VT220终端的多国字符集(DEC-MCS),作为第一批更多地设计用于国际语言而不是块图形的扩展之一。苹果机什定义了苹果操作系统,罗马和附言也定义了一个集合,两者都包含国际字母和印刷标点符号,而不是图形,更像现代字符集。
ISO/IEC 8859标准(源自美国国家标准委员会)最终提供了一个大多数系统都复制的标准(至少和他们复制美国标准代码一样准确,但有许多替代)。微软设计的另一个受欢迎的扩展, Windows-1252(通常被误标为ISO-8859-1),增加了传统文本打印所需的印刷标点符号。在2008年UTF-8变得更加普遍之前,ISO-8859-1、Windows-1252和最初的7位ASCII是最常见的字符编码。[44]
ISO/IEC 4873引入了在80–9F十六进制范围内定义的32个附加控制代码,作为将7位ASCII编码扩展为8位系统的一部分。[44]
Unicode和ISO/IEC 10646通用字符集(UCS)有更广泛的字符阵列,它们的各种编码形式已经开始在许多环境中迅速取代ISO/IEC 8859和ASCII。虽然ASCII限于128个字符,但统一码和统一通信系统通过分离唯一标识(使用称为码点的自然数)和编码(8、16或32位二进制格式,称为UTF-8、UTF-16和UTF-32)的概念支持更多字符。
ASCII作为前128个符号被合并到Unicode (1991)字符集内,因此7位ASCII字符在两个字符集内具有相同的数字代码。这允许UTF-8向后兼容7位ASCII,因为仅包含ASCII字符的UTF-8文件与包含相同字符序列的ASCII文件相同。更重要的是,前向兼容性得到了保证,因为仅识别7位ASCII字符为特殊字符且不改变最高位集字节的软件(通常支持8位ASCII扩展,如ISO-8859-1)将保持UTF-8数据不变。[45]
^@
may be typable with just Ctrl and 2.^H
" for backspace). Other terminals not designed for paper tape made the key at this location produce Backspace, and systems designed for these used that character to back up. Since the delete code often produced a backspace effect, this also forced terminal manufacturers to make any Delete key produce something other than the Delete character.\e
escape sequence is not part of ISO C and many other language specifications. However, it is understood by several compilers, including GCC.!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
^Jennings, Thomas Daniel (2016-04-20) [1999]. "An annotated history of some character codes or ASCII: American Standard Code for Information Infiltration". World Power Systems (WPS). Archived from the original on September 28, 2018. Retrieved 2018-09-28..
^Shirley, R. (August 2007), Internet Security Glossary, Version 2, RFC 4949, archived from the original on 2016-06-13, retrieved 2016-06-13.
^Maini, Anil Kumar (2007). Digital Electronics: Principles, Devices and Applications. John Wiley and Sons. p. 28. ISBN 978-0-470-03214-5. In addition, it defines codes for 33 nonprinting, mostly obsolete control characters that affect how the text is processed..
^Bukstein, Ed (July 1964). "Binary Computer Codes and ASCII". Electronics World. 72 (1): 28–29. Retrieved 2016-05-22..
^Brief Report: Meeting of CCITT Working Party on the New Telegraph Alphabet, May 13–15, 1963..
^Report of ISO/TC/97/SC 2 – Meeting of October 29–31, 1963..
^Report on Task Group X3.2.4, June 11, 1963, Pentagon Building, Washington, DC..
^Report of Meeting No. 8, Task Group X3.2.4, December 17 and 18, 1963.
^"USA Standard Code for Information Interchange, USAS X3.4-1967". United States of America Standards Institute (USASI). July 7, 1967..
^"American National Standard for Information Systems — Coded Character Sets — 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII), ANSI X3.4-1986". American National Standards Institute (ANSI). March 26, 1986..
^"Information". Scientific American (special edition). 215 (3). September 1966. JSTOR e24931041..
^Korpela, Jukka K. (2014-03-14) [2006-06-07]. Unicode Explained – Internationalize Documents, Programs, and Web Sites (2nd release of 1st ed.). O'Reilly Media, Inc. p. 118. ISBN 978-0-596-10121-3..
^ANSI INCITS 4-1986 (R2007): American National Standard for Information Systems – Coded Character Sets – 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII) (PDF), 2007 [1986], archived (PDF) from the original on 2014-02-07, retrieved 2016-06-12.
^Bit Sequencing of the American National Standard Code for Information Interchange in Serial-by-Bit Data Transmission, American National Standards Institute (ANSI), 1966, X3.15-1966.
^"BruXy: Radio Teletype communication". 2005-10-10. Retrieved 2016-05-09. The transmitted code use International Telegraph Alphabet No. 2 (ITA-2) which was introduced by CCITT in 1924..
^Smith, Gil (2001). "Teletype Communication Codes" (PDF). Baudot.net. Retrieved 2008-07-11..
^Sawyer, Stanley A.; Krantz, Steven George (1995). A TeX Primer for Scientists. CRC Press, LLC. p. 13. Bibcode:1995tps..book.....S. ISBN 978-0-8493-7159-2..
^Savard, John J. G. "Computer Keyboards". Retrieved 2014-08-24..
^"ASCIIbetical definition". PC Magazine. Retrieved 2008-04-14..
^Resnick, P. (April 2001), Internet Message Format, RFC 2822, archived from the original on 2016-06-13, retrieved 2016-06-13 (NB. NO-WS-CTL.).
^McConnell, Robert; Haynes, James; Warren, Richard. "Understanding ASCII Codes". Retrieved 2014-05-11..
^Barry Margolin (May 29, 2014). "Re: editor and word processor history (was: Re: RTF for emacs)". help-gnu-emacs (Mailing list)..
^"Help - GNU Emacs Manual"..
^Tim Paterson (August 8, 2007). "Is DOS a Rip-Off of CP/M?". DosMan Drivel..
^O'Sullivan, T. (1971-05-19), TELNET Protocol, Internet Engineering Task Force (IETF), pp. 4–5, RFC 158, archived from the original on 2016-06-13, retrieved 2013-01-28.
^Neigus, Nancy J. (1973-08-12), File Transfer Protocol, Internet Engineering Task Force (IETF), RFC 542, archived from the original on 2016-06-13, retrieved 2013-01-28.
^Postel, Jon (June 1980), File Transfer Protocol, Internet Engineering Task Force (IETF), RFC 765, archived from the original on 2016-06-13, retrieved 2013-01-28.
^"EOL translation plan for Mercurial". Mercurial. Retrieved 2017-06-24..
^Bernstein, Daniel J. "Bare LFs in SMTP". Retrieved 2013-01-28..
^"PDP-6 Multiprogramming System Manual" (PDF). Digital Equipment Corporation (DEC). 1965. p. 43..
^"PDP-10 Reference Handbook, Book 3, Communicating with the Monitor" (PDF). Digital Equipment Corporation (DEC). 1969. p. 5-5..
^CP/M 1.4 Interface Guide (PDF). Digital Research. 1978. p. 10..
^Mackenzie, Charles E. (1980). Coded Character Sets, History and Development (PDF). The Systems Programming Series (1 ed.). Addison-Wesley Publishing Company, Inc. pp. 6, 66, 211, 215, 217, 220, 223, 228, 236–238, 243–245, 247–253, 423, 425–428, 435–439. ISBN 978-0-201-14460-4. LCCN 77-90165. Archived (PDF) from the original on May 26, 2016. Retrieved May 2, 2019..
^"American Standard Code for Information Interchange, ASA X3.4-1963". American Standards Association (ASA). 1963-06-17. Archived from the original on September 28, 2018. Retrieved 2018-09-28..
^Brandel, Mary (July 6, 1999). "1963: The Debut of ASCII". CNN. Retrieved 2008-04-14..
^"Robert William Bemer: Biography". 2013-03-09. Archived from the original on 2016-06-16..
^Johnson, Lyndon Baines (1968-03-11). "Memorandum Approving the Adoption by the Federal Government of a Standard Code for Information Interchange". The American Presidency Project. Retrieved 2008-04-14..
^Richard S. Shuford (December 20, 1996). "Re: Early history of ASCII?". Newsgroup: alt.folklore.computers. Usenet: Pine.SUN.3.91.961220100220.13180C-100000@duncan.cs.utk.edu..
^Folts, Harold C.; Karp, Harry, eds. (1982-02-01). Compilation of Data Communications Standards (2nd revised ed.). McGraw-Hill Inc. ISBN 978-0-07-021457-6..
^Dubost, Karl (2008-05-06). "UTF-8 Growth on the Web". W3C Blog. World Wide Web Consortium. Archived from the original on 2016-06-16. Retrieved 2010-08-15..
^Davis, Mark (2010-01-28). "Unicode nearing 50% of the web". Official Google Blog. Archived from the original on 2016-06-16. Retrieved 2010-08-15..
^"Specific Criteria", attachment to memo from R. W. Reach, "X3-2 Meeting – September 14 and 15", September 18, 1961.
^Maréchal, R. (1967-12-22), ISO/TC 97 – Computers and Information Processing: Acceptance of Draft ISO Recommendation No. 1052.
^Davis, Mark (2008-05-05). "Moving to Unicode 5.1". Official Google Blog. Archived from the original on 2016-06-16. Retrieved 2010-08-15..
^"utf-8(7) – Linux manual page". Man7.org. 2014-02-26. Retrieved 2014-04-21..
^Bemer, Robert William (1980). "Chapter 1: Inside ASCII" (PDF). General Purpose Software. Best of Interface Age. 2. Portland, OR, USA: dilithium Press. pp. 1–50. ISBN 978-0-918398-37-6. LCCN 79-67462. Archived from the original on August 27, 2016. Retrieved 2016-08-27, from: Bemer, Robert William (May 1978). "Inside ASCII – Part I". Interface Age. 3 (5): 96–102. Bemer, Robert William (June 1978). "Inside ASCII – Part II". Interface Age. 3 (6): 64–74. Bemer, Robert William (July 1978). "Inside ASCII – Part III". Interface Age. 3 (7): 80–87..
暂无