ascii - 反斜杠 n `\n` 真的是换行符,但被视为换行符吗?
问题描述
多年来使用 C、Ruby、Perl、Java 和 PHP 或许多其他语言,我只是\n
指换行符。原来它只是“换行”但被视为“换行”?
看起来以下是一些事实,其中一些来自维基百科文章:
\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
但事实并非如此。
以上是否准确,或任何更正或补充?
解决方案
现在有以下行尾(“换行符”):
Old MacOS
0x0D = 13 = CR =\r
= 回车Linux
0x0A = 10 = LF =\n
= 换行AS400
0x85 = EBCDIC NL = NELWindows
0x0D 0x0A = CR-LF =\r\n
CR、LF 源于带有纸架的机械式书写器。由托架右端的手柄引起的 CR 导致托架被释放回左侧。LF 把马车翻了两半。
像 Java 这样的语言采用了在不传递换行符的情况下读取行的策略。它可以处理任何行尾。对于当前平台,它提供了一个保存实际换行符(行分隔符)的属性。
对于模式匹配,存在正则表达式\R
(Java "\\R"
) 来匹配任何换行符序列。
推荐阅读
- javascript - 更改元素所在的像素
- web-scraping - 有没有办法在不使用浏览器的情况下呈现 HTML 页面,然后抓取它的内容?
- r - 无法使用 hrbrthemes 中的 theme_ft_rc 从饼图中删除网格和轴
- python - Python TKinter 文本从鼠标点击获取索引?
- flutter - Flutter AudioPlayer RangeError(索引):无效值:有效值范围为空:1
- angular - Angular 生产构建一次并部署到多个站点
- flutter - 将参数从 Flutter 传递到 Google Cloud Functions
- c++ - 这个自上而下的动态编程代码的时间复杂度是多少?
- javascript - 交换机内部无法访问 Redux 数据
- java - 在 Replit 中使用输入/输出测试