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

千里ち*_*ちゃん 28 windows linux carriage-return newlines

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

无论如何,我被告知,Windows和Linux手柄newlinescarriage returns不同。我想知道他们如何以不同的方式处理它们,以及需要记住的重要地方。谢谢回答。

sle*_*ske 25

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

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

当在“文本模式”下使用时,这可能仍然适用于现代打印机,但今天几乎没有相关性。

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

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

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

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


Red*_*ick 18

CR 和 LF

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

平台依赖

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

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

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

\n 和 \r

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

总是\r指 ASCII CARRIAGE-RETURN 字符 (CR),其名称实际上来自机械打字机,其中有一个回车键,导致承载纸张的滚轮(“马车”)向右移动,由弹簧提供动力,只要它会去。从而将当前打字位置设置为左边距。

编程

在某些编程语言中,\n可能意味着在文本文件中结束或分隔行的依赖于平台的字符序列。例如,在 Perl 中,print "\n"在 Linux 上生成的字符序列与在 Windows 上不同。

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

Unix 风格

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

Linux 和 OSX 遵循 Unix 约定

文本文件

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

打印机

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

  • 关于 Java 的注意事项:通常不应该“根本不使用 \n 或 \r”。只是在Java中,“\n”总是LF,而“\r”总是CR。这*可能*正是您想要的:如果您想要特定的行尾样式,请使用它们;如果你明确想要你正在运行的计算机的本机行尾,*然后*使用`line.separator`。这真的取决于你想要什么。 (2认同)

小智 6

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

  • Linux 是否只是忽略“\r”还是会导致某种行为改变? (3认同)