【发布时间】:2021-03-18 21:31:13
【问题描述】:
多年来使用 C、Ruby、Perl、Java 和 PHP 或许多其他语言,我只是将\n 表示换行符。原来它只是“换行”但被视为“换行”?
看起来以下是一些事实,其中一些来自the Wikipedia article:
-
\n是换行符,而不是换行符,但几乎所有系统都将其视为“新行”。 - 理论上
\r\n实际上就是换行符,因为它将光标水平移回第一个位置,并将光标向下移动一行。但是,尽管有些系统将其用作换行符 (Windows),但有些系统仅将单个\n视为换行符(Unix、Linux、Mac)。 - 有些系统实际上有换行符,例如在 IBM 大型机和 ZX80 上,但它从未变成 ASCII 字符,我们几乎从不使用它。
- 所以在 ASCII 中,我们实际上仍然只有回车
\r,即0x0d(十进制 13)和换行\n,即 0x0a(十进制 10)。 - 就编程而言,输出
0x0a字符意味着换行,尽管实际上它只是换行。 - 理论上,如果我们输出
0x0a,可以说下一个输出将继续在与前一行相同的水平位置,而不是在最左边的位置,但实际上并非如此。在大多数系统上,它始终位于最左侧。 -
\r仍被某些程序用来保持在同一行输出信息而不向上滚动。尽管我们永远不知道要打印多少“空白空间”来掩盖旧信息,但这仍然有效。可以通过 ANSI 转义序列\033[K来完成从光标到行尾的清除,或者更正确地使用在该特定平台上运行的某些 curses 库来完成。
我认为两个主要的要点是
- 我们确实没有换行符,但我们将
\n(即换行符)表示换行符,而大多数系统只是将此换行符视为“换行符”。 - 真的是
0x0a,只是为了澄清事实。多年来我一直认为是0x0d,但事实并非如此。
以上是否准确,或是否有任何更正或补充?
【问题讨论】:
-
归根结底,它只是一个字节,系统如何解释它取决于它们。这不是“真的”一回事。
-
好吧,原因是有一次,我在一次采访中(在谷歌)被问到什么是换行符,什么是换行符,什么是回车符,什么是
\n和\r... 最好是直截了当 -
据我所知,“换行符”是最常见的基于 CRLF 或 LF 和 CR 的视觉表现形式。控制字符的解释因操作系统和其他实现而异。
标签: ascii newline carriage-return linefeed