ASCII⽂件编码格式
⽂件编码格式
阶段⼀:ASCII
阶段⼆:ANSI(本地化)如:GBK、GB2312
阶段三:UNICODE(国际化)如:UTF-8
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是⼀套基于拉丁字母的字符编码,共收录了 128 个字符,⽤⼀个字节就可以存储,它等同于国际标准 ISO/IEC 646。
ASCII 规范于 1967 年第⼀次发布,最后⼀次更新是在 1986 年,它包含了 33 个控制字符(具有某些特殊功能但是⽆法显⽰的字符)和 95个可显⽰字符。
0:48
A:65
a:97
SCII 编码⼀览表(淡黄⾊背景为控制字符,⽩⾊背景为可显⽰字符)
⼆进制⼗进制⼗六进制字符/缩写解释
00000000000NUL (NULL)空字符
00000001101SOH (Start Of Headling)标题开始
00000010202STX (Start Of Text)正⽂开始
00000011303ETX (End Of Text)正⽂结束
00000100404EOT (End Of Transmission)传输结束
00000101505ENQ (Enquiry)请求
00000110606ACK (Acknowledge)回应/响应/收到通知
00000111707BEL (Bell)响铃
00001000808BS (Backspace)退格
00001001909HT (Horizontal Tab)⽔平制表符
00001010100A LF/NL(Line Feed/New Line)换⾏键
00001011110B VT (Vertical Tab)垂直制表符
00001100120C FF/NP (Form Feed/New Page)换页键
00001101130D CR (Carriage Return)回车键
00001110140E SO (Shift Out)不⽤切换
00001111150F SI (Shift In)启⽤切换
000100001610DLE (Data Link Escape)数据链路转义
000100011711DC1/XON
(Device Control 1/Transmission On)设备控制1/传输开始
000100101812DC2 (Device Control 2)设备控制2
000100111913DC3/XOFF
(Device Control 3/Transmission Off)设备控制3/传输中断
000101002014DC4 (Device Control 4)设备控制4
000101012115NAK (Negative Acknowledge)⽆响应/⾮正常响应/拒绝接收000101102216SYN (Synchronous Idle)同步空闲
000101112317ETB (End of Transmission Block)传输块结束/块传输终⽌000110002418CAN (Cancel)取消
000110012519EM (End of Medium)已到介质末端/介质存储已满/介质中断00011010261A SUB (Substitute)替补/替换
00011011271B ESC (Escape)逃离/取消
00011100281C FS (File Separator)⽂件分割符
00011101291D GS (Group Separator)组分隔符/分组符
00011110301E RS (Record Separator)记录分离符
00011111311F US (Unit Separator)单元分隔符
001000003220(Space)空格
001000013321! 001000103422" 001000113523# 001001003624$ 001001013725% 001001103826& 001001113927' 001010004028( 001010014129) 00101010422A* 00101011432B+ 00101100442C, 00101101452D-00101110462E. 00101111472F/ 0011000048300 0011000149311 0011001050322 0011001151333 0011010052344 0011010153355 0011011054366 0011011155377 0011100056388 0011100157399 00111010583A: 00111011593B; 00111100603C< 00111101613D= 00111110623E> 00111111633F? 010*********@ 010*********A 010*********B 010*********C 010*********D 010*********E 010*********F 010*********G 010*********H 010*********I 010********A J 010********B K 010********C L 010********D M 010********E N 010********F O
010*********P 010*********Q 010*********R 010*********S 010*********T 010*********U 010*********V 010*********W 010*********X 010*********Y
010********A Z
010********B[
010********C\
010********D]
010********E^
010********F_
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066A j
011010111076B k
011011001086C l
011011011096D m
011011101106E n
011011111116F o
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227A z
011110111237B{
011111001247C|
011111011257D}
011111101267E~
011111111277F DEL (Delete)删除
对控制字符的解释
ASCII 编码中第 0~31 个字符(开头的 32 个字符)以及第 127 个字符(最后⼀个字符)都是不可见的(⽆法显⽰),但是它们都具有⼀些特殊功能,所以称为控制字符( Control Character)或者功能码(Function Code)。
这 33 个控制字符⼤都与通信、数据存储以及⽼式设备有关,有些在现代电脑中的含义已经改变了。
有些控制符需要⼀定的计算机功底才能理解,初学者可以跳过,选择容易的理解即可。
下⾯列出了部分控制字符的具体功能:
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,意思是“⽂本结束”。
通过某种通讯协议去传输的⼀个数据(包),称为⼀帧的话,常会包含⼀个帧头,包含了寻址信息,即你是要发给谁,要发送到⽬的地是哪⾥,其后跟着真正要发送的数据内容。
⽽ STX,就⽤于标记这个数据内容的开始。接下来是要传输的数据,最后是 ETX,表明数据的结束。
⽽中间具体传输的数据内容,ASCII 并没有去定义,它和你所⽤的传输协议有关。
帧头数据或⽂本内容
SOH(表明帧头开始)......(帧头信息,⽐如包含了⽬的地址,表明你发
送给谁等等)
STX(表明数据开
始)
......(真正要传输的
数据)
ETX(表明数据
结束
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)unicode文件格式
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语⾔和 Uni
x 重新定义了 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,已到介质末端,介质存储已满。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。