替代字符
替代字符(英語:,␚)是一个控制字符,它被用于替代识别为无效、错误或不能在指定设备上表示的字符。它也被一些编程语言用于转义序列。
在ASCII和Unicode字符编码中,该字符的编码为第26号(十六进制 1A)。标准键盘下,同时按下Ctrl + Z键将发送此代码(Ctrl+Z通常表示为^Z)。[1]当使用Unicode进行编码时,输出会兼容该字符时,但是推荐使用 replacement character (�, U+FFFD) 进行代替,以达到解码时显示该字符的目的。
使用
文件末尾
在CP/M 1和2(以及MP/M的衍生品)上,EOF必须被显式标记,因为CP/M文件系统本身不记录文件大小,并且文件放在固定大小的记录空间上,而每个文件的结尾通常都会留下一些已分配但未使用的空间。[2][3]在CP/M上这会使用十六进制的1A字符填充。CP/M 3及更高版本(以及如Concurrent CP/M、Concurrent DOS和DOS Plus等衍生品)所使用的扩展CP/M文件系统支持字节粒度文件,[4][5]所以这不再是一个强制要求,而是一个纯粹的惯例,以确保向后兼容性。
在CP/M、86-DOS、MS-DOS、PC DOS、DR-DOS及它们的各种衍生品中,字符26也用于指示字符流的结束,从而用于终止交互式用户输入命令行窗口(以及经常用于完成控制台输入重定向,例如COPY CON: TYPEDTXT.TXT所要求的输入)。
尽管在技术上不再需要指示文件的结束,但许多文本编辑器和程序语言直到现在仍支持该约定,或者可以被配置为在编辑时将该字符插入到文件末尾,或者至少适当地处理它们的文件。在这种情况下,它通常被称之为“软”EOF,因为它不一定表示文件的物理性结束,更多是“之后没有有用数据”的一种标记。因此事实上,在该字符后可能仍存有有用的数据,直至它在文件系统上的终止点。因而,它也可以被用来隐藏文件的内容,在文件输入到控制台或某些编辑器时。许多文件格式标准(例如PNG和GIF)在其标题段中包含字符26以精确完成功能。一些现代的文本文件格式(例如CSV-1203[6])仍推荐插入EOF字符作为文件的最后一个字符。但是,在MS-DOS和微软Windows中输入Control+Z并不会嵌入一个EOF字符,系统API也不使用该字符来表示文件的实际结尾。
一些编程语言(例如Visual Basic)在使用内置的文件读取方式时不会读取软EOF之后的内容,因此若需要则必须使用替代方法,例如将文件打开为二进制模式,或者使用“文件系统对象”操作它。
字符26被用于标记“文件结束”,即使ASCII将它称为“替代”(Substitute),并且有其他字符完成此目的。被称为“文件分隔符”的字符28也被用于类似的目的
其他
Unicode安全注意事项 (页面存档备份,存于)(英文)建议将此字符作为字符集转换期间不可映射字符的安全替代品。
参考资料
- . Microsoft Support. Microsoft. [2 June 2012]. (原始内容存档于2015-03-10).
- John Elliott (1998).
- John Elliott (1998).
- John Elliott (1998).
- John Elliott (1998).
- CSV-1203 format specification Portuguese Web Archive的存檔,存档日期2016-05-16
- . linux.die.net. [2020-01-14]. (原始内容存档于2015-07-23).
- . IT Connect. University of Washington. [2 June 2012]. (原始内容存档于2020-11-06).