回车顺序和新换行

Cha*_*had 31 text newline

是否有正确的回车顺序然后新换行?对于文本编辑器,它们出现的顺序是否重要?

例如,而不是

\r\n
Run Code Online (Sandbox Code Playgroud)

这个

\n\r
Run Code Online (Sandbox Code Playgroud)

好像杰夫已经写了一篇关于这个主题的非常好的博客文章.

Hot*_*cks 31

当使用两个控制字符时,传统的顺序是回车符,然后是换行符.

原因可以追溯到旧的ASR-33 Teletype.

当ASR-33发出回车时,如果打印头靠近右边缘,打印头需要十分之一秒才能返回到左边距,再加上左边有一点"反弹"保证金受到打击.

如果订单是换行,然后是回车,则第一个打印字符可能在回车后十分之一秒内发生,因此可能最终在页面中间打印(作为涂片).但如果在回车后进行换行,那么换行所需的时间为打印头完成行程提供了额外的时间.

一些系统(我认为旧的Xerox Sigma 7 OS,例如)进行换行,然后进行回车,但是它们将例如NULL字符注入到数据流中以允许打印头执行此操作.

当然,当你使用更快的设备(例如早期的30个CPS电传打字机)时,问题会变得更糟,需要更复杂的策略.

(还有一点是,对于用户输入,用户按回车键提供回车,而换行必须由计算机提供.因此,通常打印正常的"样式"行以换行开头,以回车结束.用户输入的提示只包含换行,而用户输入以回车结束.这个方案在使用时效果很好,但当然没有总是发生.)

  • 我不认为问题作者想知道历史原因。我认为今天了解为什么使用 '\r\n' 而不是 '\n\r' 更重要。 (2认同)

Con*_*ler 21

有三种常见的换行格式:

  • \ r \n为DOS\Windows世界
  • \ r \n为OSX之前的Mac世界
  • \n对于Unix和类Unix的世界

\n\r并不是我所知道的任何标准,并且可能会导致编辑认为它具有Unix格式的文本文件,然后它会将奇怪的\ r \n字符显示为文本.

历史上,\ r转换为回车(CR,ASCII代码13),它指的是旧式打字机,您可以将托架向后推回以将光标返回到行的开头.\n转换为换行符(LF,ASCII代码10),将字符向下移动一页字符.虽然可能有趣,但通常无关紧要 - 只需为您当前的平台使用适当的换行格式.


Cha*_*had 5

作为回车的后续行动,然后是换行研究锅。

使用记事本,它会在找到字符 CR+LF 时检测行尾。这是 CP/M、MS-DOS 和 Win32 使用的通用格式,Source

Unix 在找到 LF 时检测到行尾。
Apple 在找到 CR 时检测到行尾。

从 Uni-Code 的角度来看,有一个称为NEXT LINE (NEL)的控制字符只是为了使情况更加复杂。

用C编程语言,为什么给它换行符就写回车+换行符?例如

printf("hello World \n ")。

C 编程语言和 Unix 操作系统将换行符重新定义为换行符,目的是 stdio 库将换行符转换为实际转到该平台下一行开头所需的任何字符,例如,回车 + 换行符对于 Win32。

因此,当您在 C/C++ 和 Windows 或 Linux 上编写换行符(即真正的 LF 字符)时,工作室库将确定需要为该平台的行尾输出的输出格式。

这在 C 程序中创建二进制文件或文本文件时很明显。如果您指定您正在编写二进制文件,工作室库将保持该平台的输出格式不变。因此,当将数据写入文件并遇到换行符时,它不会为新行插入平台相关字符。

虽然在这一切之后得出了结论。

即使您确实遵循 Win32 回车 + 换行规则,例如将以下内容作为纯二进制文件写入文件。

我的文本\n 我的文本\n 我的文本

你假设它会在你的文本编辑器中呈现这样。

我的文本 
      我的文本 
            我的文本

大多数编辑器反而会像这样渲染它。

我的文本 
我的文本 
我的文本

混淆主要是因为 C 标准使用 \n 换行符表示两种不同的含义。首先,作为STIO库的换行符转换为操作系统换行格式(win32上为CR+LF,Linux上为LF,苹果为CR)。其次作为十六进制值换行。


经过10次修改,在Win3.1,95,98,XP上尝试了不同的方法后,我得出的结论是我找不到独立使用CR和LF并且可以在同一文档中组合使用它们的应用程序。大多数文本编辑器在遇到单个 CR 或 LF 时会显示一个正方形。大多数更智能的文本编辑器会根据是否找到适合平台的 CR+LF/LF/CR 来更改文件格式。

大多数(如果不是全部)编辑器只关心向用户呈现新行,并会在不同的文件格式之间切换。因此,如果您的作者很快就会使用词法分析器和字符串标记器,并且担心何时检测新行。最好让下层检测文件格式(CR+LF Win32、LF Linux、CR Apple)来增加行号。或者使用将考虑到这一点的 ReadLine 功能。

至少令人费解的是,为什么 IBM 和 Win32 采用回车 + 换行作为指示文本编辑器呈现新行的标准。事实上它的冗余。我找不到单独呈现或使用回车 + 换行符作为它建议的实际名称的单个应用程序。

因此,如果您的一名大学生正在编写新的文本编辑器来震惊世界。自动检测文件格式,不用担心赋予CR+LF的实际技术含义。


Ger*_*obs 5

(很抱歉,这是有关此问题的搜索结果的主要结果)

在Notepad ++中确实很重要。当您从换行开始,\n然后回车时\r,换行将在下一行结束。因此顺序应为:CR LF

在此处输入图片说明