控制字符

不在屏幕上显示,但用于指示文本处理方式的特殊字符。包括换行 (LF)、制表符 (HT)、回车 (CR)、空字符 (NUL) 等。

控制字符 (control character) 不是用来显示的文字,而是用于控制文本处理和显示行为的特殊字符。ASCII 的前 32 个字符 (U+0000 至 U+001F) 和 DEL (U+007F) 被归类为控制字符。Unicode 还在 U+0080 至 U+009F 范围内定义了额外的控制字符。

日常使用中常见的控制字符数量有限。LF (Line Feed,U+000A) 表示换行,是 UNIX/Linux/macOS 系统的标准换行符。CR (Carriage Return,U+000D) 将光标移回行首,Windows 使用 CR+LF 两个字符表示换行。HT (Horizontal Tab,U+0009) 是制表符,用于文本的列对齐。NUL (U+0000) 是空字符,在 C 语言中标记字符串的结尾。

在字符计数中,控制字符的处理常常引起混淆。在文本编辑器中按下回车键,视觉上只是换了一行,但内部实际插入了 LF (1 字节) 或 CR+LF (2 字节)。统计 Windows 创建的文本文件字符数时,每个换行会被计为 2 个字符 (CR+LF),比 UNIX/macOS 创建的同一内容文件多出若干字符。这在跨平台协作时尤其需要注意。

在 Web 环境中,HTML 会将连续的空白字符 (空格、制表符、换行) 压缩为一个空格来显示。因此,HTML 源代码中的字符数与浏览器实际显示的文本字符数并不一致。使用 <pre> 元素或 CSS 的 white-space: pre 可以保留包括控制字符在内的空白原样显示。

从安全角度看,控制字符可能成为注入攻击的手段。在 HTTP 头部插入 CR+LF 的"HTTP 头部注入"攻击,以及在日志文件中插入换行来伪造日志条目的"日志注入"攻击都是已知的安全威胁。对用户输入进行净化处理以去除控制字符,是安全防护的基本措施。

Unicode 中除了控制字符外,还有一类"格式字符"。零宽空格 (U+200B)、零宽连接符 (U+200D)、双向控制字符 (U+200E、U+200F) 等属于此类。它们与控制字符一样不可见,但会影响文本的显示方式,因此在字符计数时需要明确其处理规则。

分享这篇文章