ASCII 码
这是一个众所周知的事实,计算机内部只能处理0和1。 尽管这样,计算机通过0和1组成的序列可以表示任何算术数值,这些数值只需要通过简单的二进制运算去“翻译”。
然而, 用0和1去表示字母和其它非数字符号或不是那么容易。于是,计算机使用ASCII表去完成这个任务,ASCII表列出了所有字母,罗马字母和一些额外的字符。在这些表中,字符总是被同一个数字编号代表。比如,ASCII表中大写字母“A”总是被数字编号65代表,而65这个编号很容易被0和1组成的二进制序列代表:65用二进制表示就是1000001。
标准的ASCII表定义了128个字符编码(从0到127),在它们当中,前面32个是控制字符(不可打印的),剩下的96个编码表示对应的可打印的字符。
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | TAB | LF | VT | FF | CR | SO | SI |
1 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2 | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | |
3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ |
* 这张表的组织结构是为了便于以十六进制的方式阅读:行号代表编码中的第一个数字,列号编码中的第二个数字。比如,"A" 这个字母被列在第4行第1列,所以它对应的十六进制数为0x41 (65)。
由于现在多数系统都以8个bit组成的byte工作,一个byte可以表示256种不同的数值,除了128个标准的ASCII码之外,还有其他128个扩展ASCII,这是与平台和语言环境相关的的128个标准ASCII码。因此存在多个扩展ASCII编码字符集。
OEM和ANSI扩展ASCII字符集是两个最常用的扩展ASCII字符集。OEM是IBM-PC中默认的字符集,ANSI扩展ASCII字符集被多数新的操作系统采用。
OEM字符集,是由大多数PC兼容的硬件使用的,而且还在老的DOS系统下使用。它包含了一些外国文字符号,一些被标注的字符和一些用于画边框的符号:
ANSI字符集是一个被许多操作系统采用的字符集,比如Windows和一些UNIX平台以及一些平台无关的应用程序。它包含了更多地域化的符号,和被标注的字母。所以它可以在无需重新定义的情况下用于表示更多的语言: