java - 为什么 JAVA 中会忽略 ASCII SUB (\u001a)?

标签 java lexical

在 Java 规范中,我读到了

As a special concession for compatibility with certain operating systems, the ASCII SUB character (\u001a, or control-Z) is ignored if it is the last character in the escaped input stream. Here

我不明白 SUB 字符是什么以及为什么应该删除/忽略它如果它是转义输入流中的最后一个字符

谁能帮我理解一下。非常感谢

最佳答案

Ctrl+Z 控制代码在 Windows 中有点特殊,它继承自 DOS,而 DOS 则继承自 CP/M。它的传统用途是作为文本结束标记,类似于 Ctrl+D 在 Unix 中的使用方式。

它作为不可打印字符包含在 unicode 中,以匹配现有的 ASCII 字符 0x1A。

许多文本编辑器和程序语言仍然支持此约定,或者可以配置为在编辑时在文件末尾插入此字符。 CSV 文件的标准规范仍然建议将尾随 EOF 字符附加为文件中的最后一个字符。

参见https://en.wikipedia.org/wiki/Substitute_character

由于您永远不会在任何其他地方遇到此字符,特别是在转义输入流中,其中只应出现可打印的 ascii 字符,因此可以在任何地方安全地忽略该字符。实际上,只有当它是转义输入流中的最后一个字符时才会被忽略。

因此,如果您将 Ctrl-Z 放在源代码中间,例如作为变量名的一部分,您将收到编译器错误。 但是,如果您在某个古老的文本编辑器中编写代码,并在文件末尾添加 Ctrl-Z,编译器将安全地为您忽略它。

关于java - 为什么 JAVA 中会忽略 ASCII SUB (\u001a)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61460004/

相关文章:

Java-如何通过对角扩展像素来调整图像大小

Scheme 中的范围 (Lisp)

CSS 词法错误

javaparser - 遇到词法错误 : <EOF> after : ""

lexical - 如何检查编辑器是否为空?

Java,将所有数据类型放在一个数组中

java - 如何编写 Apache Storm 程序

java - apache ant 未正确安装

java - 如何在输入验证期间显示临时气球工具提示?