我认为\n
将针向下\r
移动,然后将针移动到一行的开头(左对齐)?不过,我不确定。所以,如果我错了,请纠正我。
无论如何,我被告知,Windows和Linux手柄newlines
和carriage returns
不同。我想知道他们如何不同地处理它们,以及在某些重要的地方要记住。谢谢回答。
\r
和\n
,因为\n
处理方式取决于您在哪里使用它。更好的给他们打电话CR
和LF
。
我认为\n
将针向下\r
移动,然后将针移动到一行的开头(左对齐)?不过,我不确定。所以,如果我错了,请纠正我。
无论如何,我被告知,Windows和Linux手柄newlines
和carriage returns
不同。我想知道他们如何不同地处理它们,以及在某些重要的地方要记住。谢谢回答。
\r
和\n
,因为\n
处理方式取决于您在哪里使用它。更好的给他们打电话CR
和LF
。
Answers:
我认为\ n将针向下移动,而\ r将针移动到一行的开头(左对齐)?不过我不确定
这或多或少是对的,但主要是历史上的好奇心。最初,在打印机和硬拷贝终端(电传打印机)上,使用换行(LF)将纸张前进一行。回车(CR)使打印头返回到行的开头。
当在“文本模式”下使用时,这可能仍可在现代打印机上使用,但如今已不那么重要了。
无论如何,有人告诉我Windows和Linux处理换行符和回车符的方式不同。
区别很简单:操作系统设计人员必须选择如何用计算机文件中的文本表示新行的开头。由于各种历史原因,在Unix / Linux世界中,选择了一个LF字符作为换行符;MS-DOS选择了CR + LF,Windows继承了它。因此,不同的平台使用不同的约定。
实际上,这已成为越来越少的问题。换行标记实际上仅与处理“纯文本”的图形有关,并且数量不多-它仅影响程序源代码,配置文件以及带有文档的一些简单文本文件。如今,大多数处理这类文件的程序(编辑器,编译器等)都可以处理换行符,因此选择哪一个都不重要。
在某些情况下,工具坚持使用“其”换行符约定(例如,Unix shell脚本不得使用CR + LF),在这种情况下,您必须使用正确的约定。
\n\r
并且\n
相同?例如,如果我解析已编辑别人的电脑上,并包含在Linux和Windows版本换行符的两个文本文件,就执行preg_match
了\n
,并\n\r
给我不同的结果?
美国信息交换标准码(ASCII)定义了控制字符,包括(现在仍然)用来控制打印机上打印位置的CARRIAGE-RETURN(CR)和LINE-FEED(LF)。机械打字机,早于早期的计算机打印机。
在Windows中,文本文件中的传统行分隔符是CR,后跟LF
在旧的(OSX之前的)Apple Macintosh系统中,文本文件中的传统行分隔符为CR
在Unix和Linux中,文本文件中的传统行分隔符为LF。
在许多编程和脚本语言中,语言\n
意味着“换行”。有时(但不总是),这意味着ASCII LINE-FEED字符(LF),正如您所说的那样,将光标(或打印位置)向下移动了一行。在打印机或打字机中,这实际上会将纸张向上移动一行。
始终\r
是指ASCII CARRIAGE-RETURN字符(CR),其名称实际上来自机械打字机,那里有一个回车键,该键使携带纸张的滚轮(“支架”)在靠弹簧的作用下向右移动,尽其所能。因此,将当前打字位置设置在左边距。
在某些编程语言\n
中,其含义可能是平台相关的字符序列,这些字符在文本文件中结束或分隔成一行。例如,在Perl中,print "\n"
Linux上的字符序列与Windows上的字符序列不同。
在Java中,最好不要使用\n
或根本不使用运行时平台的本机行结尾\r
。您应该使用System.getProperty("line.separator")
。无论平台如何,都应使用LF和CR,\n
并\r
在其上使用LF和CR(例如,在HTTP,FTP和其他Internet通信协议中使用)。
在Unix Shell中,该stty
命令可用于使Shell在这些各种约定之间转换。例如,stty -onlcr
将导致外壳随后将所有传出的LF转换为CR LF。
Linux和OSX遵循Unix约定
文本文件仍然非常重要并得到广泛使用。例如,HTML和XML是文本文件的示例。大多数重要的Internet协议(例如HTTP)都遵循文本文件约定,并包含行尾规范。
除了最便宜的打印机以外,大多数打印机仍然尊重CR和LF。实际上,它们是最广泛使用的页面描述语言(PCL和Postscript)的基础。
line.separator
。这实际上取决于您想要什么。
println()
自动使用line.separator
,因此,如果您想要本机的行尾,则可以使用println()
(并且,如果您需要某种特定类型的行尾,则不要使用它,而是显式地使用“ \ n”等)。
\n
的控制字符不是ASCII LF(基于EBCDIC的系统除外)?我指的\n
是字符串或字符文字中的含义,而不是指将其发送到文件或输出设备的效果。
\n
始终是ASCII(和Unicode)代码10,因为JLS如此明确地指出(JLS 3.10.6,“字符和字符串文字的转义序列”-我检查了:-))。对于其他语言-好问题。
\r\n
在Windows 中是可以的,但\n\r
不是。我记得,因为这\r\n
是注册护士的首字母缩写。我还听说\n
人们在Linux中使用的\r
是它,而不是为了和Linux 相同的目的而被单独使用\r\n
。\r
用于真正的旧MacOS。不过,我尚未证实这些事实。