\r\n vs \n\r 他们的行为有什么区别?
\r\n vs \n\r what is the difference in their behavior?
我指的是 this 问题并了解到 \n 将光标移动到下一行而不重置它,而 \r 重置光标但不将其移动到下一行。并且 \r\n 在 Windows 中用作新行字符。
所以出于好奇,我将 \r\n
和 \n\r
分配给字符串以及 Java 中的一些其他值,并在我的 Windows 环境中的控制台中打印它们。
System.out.println("ABC\r\nDEF");
System.out.println("ABC\n\rDEF");
输出 1:
ABC
DEF
根据我的理解,这里 \r
只是重置了光标并将其移动到同一行的开头(第 1 行),\n
将其前进到下一行(第 2 行) ).因此 DEF
换行打印。
输出 2:
ABC
DEF
但我无法理解输出 2。我认为这应该与输出 1 相同,因为如果 \n
将光标前进到下一行(第 2 行)然后如果 \r
重置它并将其放在同一行的开头(在这种情况下可能是第 2 行)那么为什么 DEF
没有在第 2 行打印?
编辑:
这是 this 或 this
中未涵盖的附加问题
区别在于\n\r
不存在,而\r\n
存在。原因,回到过去,是像 ASR-33 这样有 'carriage' 的硬件可能会重叠马车 return 和换行符 如果 马车 return 先来。使用 \n\r
效率极低,所以没有人这样做。
所以不要这样做。
这与 Java 无关,与 console/terminal/etc 无关。那就是将输出转换为显示。
在Windows命令windows中,规范的"end-of-line"编码是\r\n
。 Windows 将其视为一个实体。
虽然历史原因是电传打字机的马车return(将打印头向左移动)和换行符(将纸张前进一行),在Windows \r\n
就显示而言是一个 "thing"。
\n\r
不会以相同的方式被识别为一个 "thing"。但是它通过一行前进来处理每个字符。
我指的是 this 问题并了解到 \n 将光标移动到下一行而不重置它,而 \r 重置光标但不将其移动到下一行。并且 \r\n 在 Windows 中用作新行字符。
所以出于好奇,我将 \r\n
和 \n\r
分配给字符串以及 Java 中的一些其他值,并在我的 Windows 环境中的控制台中打印它们。
System.out.println("ABC\r\nDEF");
System.out.println("ABC\n\rDEF");
输出 1:
ABC
DEF
根据我的理解,这里 \r
只是重置了光标并将其移动到同一行的开头(第 1 行),\n
将其前进到下一行(第 2 行) ).因此 DEF
换行打印。
输出 2:
ABC
DEF
但我无法理解输出 2。我认为这应该与输出 1 相同,因为如果 \n
将光标前进到下一行(第 2 行)然后如果 \r
重置它并将其放在同一行的开头(在这种情况下可能是第 2 行)那么为什么 DEF
没有在第 2 行打印?
编辑:
这是 this 或 this
中未涵盖的附加问题区别在于\n\r
不存在,而\r\n
存在。原因,回到过去,是像 ASR-33 这样有 'carriage' 的硬件可能会重叠马车 return 和换行符 如果 马车 return 先来。使用 \n\r
效率极低,所以没有人这样做。
所以不要这样做。
这与 Java 无关,与 console/terminal/etc 无关。那就是将输出转换为显示。
在Windows命令windows中,规范的"end-of-line"编码是\r\n
。 Windows 将其视为一个实体。
虽然历史原因是电传打字机的马车return(将打印头向左移动)和换行符(将纸张前进一行),在Windows \r\n
就显示而言是一个 "thing"。
\n\r
不会以相同的方式被识别为一个 "thing"。但是它通过一行前进来处理每个字符。