ASCII 前32个字符是用来做什么的?

news/2025/3/31 17:00:18/文章来源:https://www.cnblogs.com/ofnoname/p/18798715

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)诞生于1963年,由美国国家标准协会(ANSI)制定,最初目的是为了标准化不同计算机和设备之间的文本通信。这个7位编码系统共定义了128个字符(0-127),其中前32个(0-31)以及最后一个字符(127)被称为"控制字符",它们不像字母、数字或标点符号那样直接显示为可见字符,而是用于控制数据传输或设备行为。

在程序设计领域,ASCII 表是基础知识,我们每一个人都熟悉无比。但前32个控制字符的功能却常常令人困惑。这些诞生于计算机早期、主要面向电传打字机设计的控制代码,在现代计算环境中有的依然发挥着重要作用,有的则已基本废弃。

0-7号:基础通信控制

NUL (0, \0):空字符,ASCII中最简单的字符,却可能是最重要的。最初用于填充时序或标记数据流结束,在C语言中被用作字符串终止符,这一设计影响了几乎所有现代编程语言。当 NUL 出现在文本中时,许多程序会将其视为字符串结束标志,可能导致文本截断。

SOH (1):标题开始 (Start of Heading),STX (2):正文开始(Start of Text),ETX (3):正文结束(End of Text)。这组字符设计用于数据帧结构,SOH标记消息头开始,STX标记实际内容开始,ETX标记内容结束。现代网络协议已采用更复杂得多的封装方式,这些字符几乎不再使用,但在某些串行通信和工业控制系统中仍可见其身影。

EOT (4):传输结束(End of Transmission),用于通知接收方数据传输完成。在某些时候仍然使用,如在 Unix 终端中,Ctrl+D会发送EOT字符,表示"无更多输入"。

ENQ (5):询问(Enquiry),用于发起通信请求,期待对方响应。ACK (6):确认(Acknowledge)和NAK (7):否定确认(Negative Acknowledge)构成简单的通信协议,这些概念后来也发展为TCP/IP等现代协议中的确认机制,但字符本身几乎不再使用。

8-13号:排版与导航

BS (8, \b):退格(Backspace),将光标向左移动一位。在电传打字机上实际会移动打印头,现代系统仍在使用,终端通常只移动光标,而实际删除取决于应用程序。在文本中输入 \b 通常会使前一个字符"消失"。你可以在控制台打印abc\ba,控制台会出现aba

HT (9, \t):水平制表(Horizontal Tab),即Tab键,非常常用。最初设计用于快速对齐到预设的制表位(通常每8列),现代文本编辑器则提供灵活的制表符处理。在数据交换中,制表符常用于分隔字段(如TSV文件)。

LF (10, \n):换行(Line Feed)。LF将光标下移一行(不必然回到行首),最为广泛使用的换行符。

VT (11):垂直制表(Vertical Tab)。VT则用于将打印头移动到下一个垂直制表位,这一功能在现代终端中已很少支持,基本上没有作用。

FF (12, \f):换页(Form Feed),在打印机中会弹出当前页并开始新页,偶尔有用,在终端中常清屏或跳转到下一页。

CR (13, \r):回车(Carriage Return),将光标移动到行首。Windows系统使用CR+LF作为行结束符,而Mac OS早期版本仅使用CR,反映了不同系统的设计选择。

14-19号:设备控制

SO (14):移出(Shift Out)和SI (15):移入(Shift In)。用于切换打印字符集,在支持多字符集的终端上,SO可能切换到替代字符集(如图形符号),SI切换回标准字符集。这一机制可视为Unicode等现代字符编码方案的雏形。

DLE (16):数据链路转义(Data Link Escape),用于修改后续字符的意义,类似于现代通信中的"转义字符"。在二进制协议中,DLE可用于标记控制序列的开始。

DC1-DC4 (17-20):设备控制1-4,最初用于控制外围设备(如磁带机启停)。有趣的是,DC1 (17, XON)和DC3 (19, XOFF)演变为软件流控制信号,用于暂停/恢复数据传输(如终端与调制解调器通信)。

21-31号:高级控制功能

NAK (21):否定确认(Negative Acknowledge),SYN (22):同步空闲(Synchronous Idle),ETB (23):传输块结束(End Transmission Block)。这些字符用于早期同步通信协议,现代系统已采用更复杂的错误检测和纠正机制。

CAN (24):取消(Cancel),表示之前发送的数据应被丢弃。EM (25):介质结束(End of Medium),标记存储介质(如磁带)的物理结束。这两个字符在现代系统中已很少使用。

SUB (26):替换(Substitute),用于替换无效或损坏的字符。在Unix终端中,Ctrl+Z会发送SUB字符,通常用于挂起前台作业。

ESC (27, \e):转义(Escape),可能是最具影响力的控制字符。它引入控制序列,成为ANSI转义码(终端颜色和光标控制)和许多其他控制协议的基础。现代终端模拟器仍然广泛支持ESC序列。

FS (28):文件分隔符(File Separator),GS (29):组分隔符(Group Separator),RS (30):记录分隔符(Record Separator),US (31):单元分隔符(Unit Separator)。这组字符设计用于结构化数据,可视为早期版本的CSV或JSON分隔符概念。虽然现代系统很少直接使用它们,但分隔符的思想在各种数据格式中得以延续。

DEL (127):删除字符

严格来说不属于前32个字符,但作为唯一的非可见控制字符(在7位ASCII中),DEL值得特别关注。最初设计用于"擦除"穿孔纸带上的字符(将所有孔位打穿表示删除),现代系统中通常表示删除操作。在终端输入中,Backspace键可能发送DEL字符(与BS不同),具体行为取决于系统配置。

控制字符的现代命运

随着计算环境演变,这些控制字符的命运各不相同:

  • 持续重要:NUL、LF、CR、HT、ESC等字符在现代编程和文本处理中仍然不可或缺
  • 功能转变:如XON/XOFF流控制从硬件控制变为软件协议
  • 基本废弃:垂直制表、介质结束等字符已很少使用
  • 概念延续:分隔符类字符的思想在现代数据格式中得到继承

当这些控制字符意外出现在现代文本文件或数据流中时,可能导致各种问题:从无害的格式混乱到严重的解析错误甚至安全漏洞(如通过注入控制字符实施的终端欺骗攻击)。因此,在处理未知来源的文本数据时,过滤或转义控制字符是常见的安全实践。

ASCII控制字符如同计算历史的"活化石",记录着从电传打字机到云计算的技术演进轨迹。虽然部分字符已失去原始用途,但它们塑造的计算概念仍然影响着现代系统设计。理解这些控制字符,不仅是了解计算机历史的窗口,也是处理低级文本处理和通信问题的重要基础。在Unicode时代,这些ASCII控制字符依然保留着原始编码和功能,成为数字世界不可或缺的基础设施。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907310.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20242214 实验二《Python程序设计》实验报告

20242214 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2422 姓名: 陈冯 学号:20242214 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 一、实验内容设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善:在VS…

SvelteKit 最新中文文档教程(13)—— Hooks

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

day:32 jmeter操作数据库——安装及认识

一、jmeter数据库安装 1.下载数据驱动,安装数据驱动2、存放四个路径a.jre下的lib C:\ProgramFiles\Java\jre1.8.0_60\libb、存放在jre 下的lib 中的ext 路径: C:\ProgramFiles\Java\jre1.8.0_60\lib\extc、存放在jmeter下的lib 路径:D:\dcs\ruanjian\java\apache-jmeter-3.…

56. W5500以太网模块

一、W5500以太网模块W5500 是一款由 WIZnet 公司生产的以太网控制芯片,它集成了一个全双工的 10/100Mbps 以太网 MAC 和 PHY,以及一个硬件的 TCP/IP 协议栈。W5500 芯片通常被用于嵌入式系统中,为微控制器提供网络连接的能力,使得设备能够通过以太网进行数据传输和通信。W5…

[CF 1870E] Another MEX Problem

思路给你一个序列 \(a\), 让你选出一些不交的子段, 使得它们的 \(\rm{MEX}\) 的异或和最大不难发现因为是异或和, 可以简单转化成 \(\mathcal{O} (n^3)\) 的可行性 \(\rm{dp}\) 然后我进行了对固定右端点 \(r\) 一些优化尝试, 发现都比较寄 然后发现这个题, 它, 对, 右端点, 进…

ChatGPT-4o 更新:原生图像生成技术详解:自回归路线的逆袭

一种新的图像生成范式正在崛起,它不再依赖传统的扩散过程,而是用语言的方式“写”出图像。2025年3月,OpenAI 在更新 GPT-4o 的同时,低调上线了其“原生图像生成”功能。这一功能被嵌入到 GPT-4o 的多模态架构中,与文本、音频等能力无缝协同,带来了显著提升的图像生成质量…

PVE-0-虚拟化实验环境准备

后续实验环境的搭建过程中的技术选型虚拟化环境简介 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机(对计算机物理资源的抽象,实现资源的模拟、隔离和共享)。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在…

【Java 玩转 MCP】手把手教你打造 Git AI 仓库助手

背景 随着人工智能技术的快速发展,开发者工具也在不断进化。Gitee 作为国内领先的代码托管平台,现已推出 MCP (Model Control Protocol) 功能,让开发者能够通过 AI 助手更高效地管理代码仓库。mcp-gitee 是 Gitee 的模型上下文协议 (MCP) 服务器实现,它提供了一组与 Gitee …