ASCII
ASCII | |
---|---|
术语名称 | ASCII |
英语名称 | ASCII |
别名 | US-ASCII, ASCII码, 美国信息交换标准代码, 美国标准信息交换码, American Standard Code for Information Interchange |
ASCII[1] 是一种常见字符编码,也指这种字符编码中的字符集。 ASCII 字符集中仅含有 128 个字符,以固定方式分配在由 7 个二进制位(比特)构成的 128 个码位上。
在不同场景下, ASCII 有多种不同别名,如 US-ASCII , ISO646-US (见ISO 646)等。有时 ASCII 也会被误用于其他兼容 ASCII 的字符编码,特别是扩展 ASCII 、 ISO 8859 系列及基本符合 ISO 646 中 IRV 兼容的任意编码。习惯上,“ASCII 码”一词经常被滥用作“二进制字符编码”的同义词,泛指任意字符编码。
ASCII 标准初发布于 1963 年,有 28 个未分配字符,后续 1967 年、 1968 年、 1977 年与 1986 年有过修订,并形成了现在的标准。
字符集特征
ASCII 编码包含 33 个控制字符以及美式 qwerty 键盘布局中全部可见字符,其中包括阿拉伯数字 0~9 及大小写字母 A~Z 及 a~z 。
ASCII 被设计于电传打字机时代,其控制字符起源于打字机控制操作,其中大部分字符已经随着相关技术退出主流而不再常用,但是仍有部分控制字符仍保留在现代使用。
由于编码空间能容纳的字符总数限制, ASCII 仅覆盖了最少量的数字、英语字母及必要标点,这导致其缺少了必要的符号,比如:
- 其仅用一个码位编码了“傻瓜引号(dummy quote)”同时作为前后双引号
"
,而没有使用“智能引号(smart quote)”“”
。 - 作为发源于美国的字符编码,仅编码了美元符号
$
作为货币符号,而缺少了美分符号¢
。 - 无法支持英语中带有附加符号的字母,如
é
和ñ
等,以及全部使用分音符的元音字母。
编码特征
整体特征
ASCII 编码范围为 7 比特。 BCD 码催生了四比特数字,进而催生了八位作为传输单元。 早年希望一同传输校验码,因此产生了 1 位校验码 7 位数据的格局。
ASCII 码分区遵循十六进制安排,以兼容 BCD8421 码,并直接将区块按十六进制对齐, 这些使得部分字符间存在明显位运算关系,且可以通过位运算迅速判定字符分类,这一安排影响了后世大量字符编码系统。
历史遗留字符
全 0 表示空字符,全 1 表示擦除字符,这反映了打孔纸带时代的惯例: 空字符表示什么也不做,而擦除字符表示这个地方之前打孔有误,把这个单元全部孔打掉以示擦除,也处理为什么都不做。
位编码的码位安排
最高位区分字符所处区块,当最高两位为 0 时是控制字符,全 1 时是控制字符,否则就是普通的打印字符。
空格排在最前面,然后 21H 开始依次排列打字机键盘中常在数字换档键的字符,与现代英式 qwerty 键盘中数字上档键前一部分相同,美式 qwerty 键盘由于单双引号安排在一起, Shift+2
从 "
变成了 @
。
从 30H 开始排列数字,且数字的低 4 位与其 BCD 码相同。这使得判定前 3 位后可以兼容地发送给仅处理 4 位 BCD8421 的机器。
HEX 3? = BIN 0011 ????
从 41H 和 61H 开始排列拉丁字母,且其低 5 bit 与字母在英语字母表中的顺序相同。可以看作一个固定前缀加一位大小写,然后是字母顺序的 5 位编码。
HEX 4?~5? = BIN 010? ????
HEX 6?~7? = BIN 011? ????
码表
ASCII[2][3][4] | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | _0 ??? 0000
|
_1 ??? 0001
|
_2 ??? 0010
|
_3 ??? 0011
|
_4 ??? 0100
|
_5 ??? 0101
|
_6 ??? 0110
|
_7 ??? 0111
|
_8 ??? 1000
|
_9 ??? 1001
|
_A ??? 1010
|
_B ??? 1011
|
_C ??? 1100
|
_D ??? 1101
|
_E ??? 1110
|
_F ??? 1111
|
0_ 000 ????
|
NUL 空字符 |
SOH 标题开始[5] |
STX 正文开始[6] |
ETX 正文结束[6] |
EOT 传输结束 |
ENQ 查询 |
ACK 确认 收到应答 |
BEL 响铃[7] |
BS 退格[8] |
HT 水平制表 TAB 制表符[9] |
LF NL EOL 换行[10] |
VT 垂直制表[11] |
FF NP 换页[12] |
CR 回车[13] |
SO LS1 移出[14] |
SI LS0 移入[14] |
1_ 001 ????
|
DLE 数据链路转义[15] |
DC1 设备控制 1 XON 传输开始 |
DC2 设备控制 2 |
DC3 设备控制 3 XOFF 传输中断 |
DC4 设备控制 4 |
NAK 拒绝 否定应答 |
SYN 同步空闲 |
ETB 传输块结束 |
CAN 取消 |
EM 介质结束[16] |
SUB 代替 |
ESC 换码 转义字符 溢出 |
FS 文件分隔符[17] |
GS 组分隔符[17] |
RS 记录分隔符[17] |
US 单元分隔符[17] |
2_ 010 ????
|
SP 空格 |
! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3_ 011 ????
|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4_ 100 ????
|
@ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5_ 101 ????
|
P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6_ 110 ????
|
` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7_ 111 ????
|
p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL 擦除字符 |
使用
ASCII 编码几乎无处不在。很多协议(特别是需要兼容性以及出现较早的协议)都要求 ASCII 编码,但是面对用户的情况下又几乎不实际使用,因为 ASCII 支持字符过于有限,几乎所有应用场景中都在使用与 ASCII 兼容的某种扩展编码,而不使用 ASCII 本身。 扩展 ASCII 、 ISO 8859 系列的编码,以及符合 ISO 646 的编码,以及中文环境中常用的 GB 2312 系列编码、现代常用的 UTF-8 编码,都保证在 0~127 的编码范围内与 ASCII 兼容。
由于 ASCII 最常用于输入,字符集缺陷甚至反向影响了文本。不便于输入甚至可能构成了英语中附加符号使用减少的一个因素;大部分字体中会区分成对的尖括号和大小于号,但是 ASCII 中的混用,导致哪怕后续字符集往往区分这两对字符,也不会被区分使用。
常见字符编码 | |
---|---|
早期编码 | 电报码、 BCD 、ASCII (ISO 646) |
ISO 8859 | ISO 8859-1 、 ISO 8859-2 、…… |
各国国家标准及代码页 | GB 2312 、 GBK 、 GB 18030 |
Unicode / ISO 10646 | UTF-7 、 UTF-8、 UTF-16 、 UTF-32 |
- ↑ ASCII [ˈæs.kiː] ,中 [ä.sz̩.kɤ] 。全称为 American Standard Code for Information Interchange ,译为美国信息交换标准代码,全称只用于解释这个词语,通常使用中只使用缩写。
- ↑ https://en.wikipedia.org/wiki/ASCII#Character_set
- ↑ https://blog.csdn.net/weixin_40948750/article/details/121228437
- ↑ https://baike.baidu.com/item/ASCII/309296
- ↑ 消息的开始。
- ↑ 6.0 6.1 正文的开始和结束。
- ↑ 使蜂鸣器发出声音。一般是打字机外设的蜂鸣器,现在主板不一定安装此类外设。
- ↑ 打印头向左回退一个位置。打字机上用于将同一个字符重复打印以强调,或将附加符号打印到字母同一个位置上。在 CRT 时代无效,现代则演变变为了回退位置并删除这个位置字符的退格键。
- ↑ 打印头移动到下一个水平制表位。控制输出设备到下一个预定义的表格位置,具体位置是灵活的,通常为左侧起每 4 个空格的位置。
- ↑ 打印头移动到下一行。打字机时代只将打印头向下一行,而不移动到行首(CR)。现代在部分系统中代替 CRLF 。
- ↑ 打印头移动到下一个垂直制表位。
- ↑ 打字机打印头移动到下一页,或者换纸。
- ↑ 打印头移动到行首,但是不移动到下一行(LF)。现代在部分系统中代替 CRLF 。
- ↑ 14.0 14.1 移出、移入打字机的彩色纸带、备用字符集等。
- ↑ 标记需要对接下来的数据流做某种转义。
- ↑ 指存储介质逻辑上到达末端,已被写满。
- ↑ 17.0 17.1 17.2 17.3 最初用于打孔纸带、磁带等顺序存储介质中分隔数据控制字符。分别对应于分割文件、数据表、数据记录、数据单元(单元格,今称字段)。