在 Linux 和 Windows 上,\n 和 \r 的处理有何不同?

在 Linux 和 Windows 上,\n 和 \r 的处理有何不同?

我认为\n将针向下移动,并将\r针移动到行首(左对齐)?但我不确定。所以,如果我错了,请纠正我……

无论如何,有人告诉我 Windows 和 Linux 处理newlines方式carriage returns不同。我想知道它们处理方式有何不同,以及哪些地方需要记住。谢谢您的回答。

答案1

我认为 \n 会将指针向下移动,而 \r 会将指针移动到行首(左对齐)?不过我不太确定

这或多或少是真的,但主要是出于历史原因。最初,在打印机和硬拷贝终端上,换行符 (LF) 用于将纸张前进一行(电传打字机);回车(CR)使打印头返回到行首。

在“文本模式”下使用时,这可能仍然适用于现代打印机,但今天意义不大。

无论如何,我被告知 Windows 和 Linux 处理换行符和回车符的方式不同。

区别很简单:操作系统设计者必须选择如何在计算机文件中的文本中表示新行的开始。由于各种历史原因,在 Unix/Linux 世界中,单个 LF 字符被选为换行符;MS-DOS 选择了 CR+LF,Windows 继承了这一点。因此,不同的平台使用不同的约定。

实际上,这已越来越不成问题。换行符实际上只与处理“纯文本”的程序有关,而且这种程序并不多 — 它主要只影响程序源代码、配置文件和一些带有文档的简单文本文件。如今,处理这些类型文件的大多数程序(编辑器、编译器等)都可以处理这两种换行符约定,因此选择哪一种并不重要。

在某些情况下,工具会坚持“它们的”换行符约定(例如,Unix shell 脚本不能使用 CR+LF),在这种情况下您必须使用正确的换行符。

答案2

CR 和 LF

美国信息交换标准代码 (ASCII) 定义了控制字符,包括回车符 (CR) 和换行符 (LF),它们曾经(现在仍然)用于控制打印机上的打印位置,其方式类似于早期计算机打印机之前的机械打字机。

平台依赖性

在 Windows 中,文本文件中的传统行分隔符是 CR,后跟 LF

在旧版(OSX 之前)Apple Macintosh 系统中,文本文件中的传统行分隔符是 CR

在 Unix 和 Linux 中,文本文件中的传统行分隔符是 LF。

\n 和 \r

在许多编程和脚本语言中,\n它表示“换行”。有时(但并非总是)它表示 ASCII 换行符 (LF),正如您所说,它将光标(或打印位置)向下移动一行。在打印机或打字机中,这实际上会将纸张向上移动一行。

总是\r指 ASCII 回车符 (CR),其名称实际上来自机械打字机,其中有一个回车键,该键使承载纸张的滚轮(“托架”)在弹簧的驱动下向右移动到最远。从而将当前打字位置设置为左边距。

编程

在某些编程语言中,\n可以表示文本文件中用于结束或分隔行的与平台相关的字符序列。例如,在 Perl 中,print "\n"在 Linux 和 Windows 上产生的字符序列不同。

在 Java 中,如果要使用运行时平台的本机行尾,最佳实践是根本不使用\n或。您应该使用。无论平台如何,您都应该在需要 LF 和 CR 的地方使用和(例如在 HTTP、FTP 和其他 Internet 通信协议中使用)。\rSystem.getProperty("line.separator")\n\r

Unix 状态

在 Unix shell 中,stty可以使用该命令使 shell 在这些不同的约定之间进行转换。例如,stty -onlcr将使 shell 随后将所有传出的 LF 转换为 CR LF。

Linux 和 OSX 遵循 Unix 约定

文本文件

文本文件仍然非常重要且被广泛使用。例如,HTML 和 XML 就是文本文件的示例。大多数重要的 Internet 协议(例如 HTTP)都遵循文本文件约定并包含行尾规范。

打印机

除了最便宜的打印机外,大多数打印机仍支持 CR 和 LF。事实上,它们是最广泛使用的页面描述语言(PCL 和 Postscript)的基础。

答案3

简而言之,打印机需要这样做,但现在操作系统的做法略有不同。在大多数情况下,只需同时执行 CR 和 LF 即可,\r\n而且在大多数情况下,这样做可以正常工作。

答案4

Linux 不会忽略 \r。想想它做了什么。您可以多次回车,但最终仍会回到同一位置,即行首。

相关内容