回车、换行、回车换行、硬回车以及软回车

article/2025/9/20 20:16:52

回车、换行、回车换行、硬回车以及软回车

要想一句话说清楚它们之间的关系,不太简单。但认真看完后,会发现它们之间的关系其实也挺简单的。

回车、换行与回车换行

英文缩写对应按键英文全称中文名称解释转义表达式使用平台
CRreturnCarriage Return回车(符)将光标移至行首\r1Mac OS 早期版本
LFEnterLine Feed换行(符)将光标移至下一行\n2Unix, Linux, macOS3
CR+LF/CRLFEnterCarriage Return and Line Feed回车换行(符)将光标复位后转至下行\r\nWindows & MS-DOS

简介

关于 Line feed4,我的理解是“行进”,轴滚而纸进之,是谓换行。也有人说这里的 feed 是“满”的意思。 除此之外,换行常见的英文表达还有:line feed,newline,end of line (EOL),line ending,line break。

“回车”这一说法的由来5,源于对英文词汇 Carriage Return 的直译。Carriage6 原意为“马车”,但在这里指的并不是“马车”,而是打字机上的一个构件,俗称“字车”。

起源

一切都还得从打字机说起。回车换行这一操作最早出现在传统的的打字设备中,例如,要在电传打印机7中另起一行,分为以下两步:

  1. 将 Carriage 复位,移至起始位置,即行首8
  2. 滚筒上卷,带动纸张向上移动一行的距离,以开启新的一行。

其中,第一步就是回车,第二部就是换行。

打字机

MS-DOS 借鉴了这一理念,将 CR+LF 作为系统默认的换行标志。后来的 Windows 也就顺理成章地继承了这一设定。
Unix 的前身 Multics 选择了 LF,Unix 后来也沿用了 Multics 的方案,Linux 亦从之。
唯有异教徒 Mac OS9 使用 CR 作为换行标志,但好在后来改邪归正,也加入了 *nix 阵营。
所以就形成了如今 LFCR+LF 二分天下的局面。

严格意义上来说,回车是回车,换行是换行,谁也不从属于谁。回车指的是跳回到行首,而换行指的是开启新的一行。本质上,换行和回车并不矛盾,它们只是两个相互配合共同发挥作用的按键。但是在 Windows 中,一个完整的“换行标志”应该包括回车符和换行符这两个部分。

也许你在 Microsoft® Word 中分别按下 Enter 的时候,你会发现它们并没有什么区别。正是因为人们在换行的时候已经感受不到回车的存在了,所以人们才总是习惯于把回车和换行当作一回事。但请记住,这是错误的,尽管回车键和换行键在大多数场景下没有区别。

键位分布

在全尺寸的键盘上,Enterreturn 是两个不同的按键,位于键盘主区的右侧中部的 就是 return,位于小键盘最右下角的按键便是 Enter

键盘布局-Enter&return
而在小尺寸键盘上,这两个键共用一个键来表示,由 Enter 字样和 符号两部分组合而成,分别代表 Enterreturn

键盘布局-Enter

特殊地,Apple MacBook 系列产品的键盘上一般只有 return,没有 Enter

键盘布局-return

是什么原因导致了换行标志的差异性呢?

*nix 阵营用 LF 作为换行标志并不是无缘无故的,而是特殊历史背景10下的产物。在 16 位的系统中,1 字 = 2 字节 = 16 位,CR+LF 占用 4 个字,而单个 LF 只占 2 个字,在当时那个惜“字”如金的时代,节约每一个比特都是有必要的。所以 *nix 才做此决定。

如果文本中的换行标志不符合特定平台下的规定,那就不能被正确地识别,这种情况多发生在跨平台开发中。

例如,将在 Linux 环境中编辑的多行文本在 Windows 环境中用 记事本 程序打开,就会发现变成了原本的多行文字会变成单行文字,这就是因为 Windows 未能检测到有效的换行标志 CR+LF 而导致的问题。

硬回车与软回车

硬回车与软回车是排版系统中的概念,用以区分、标记段落层次。二者区别见下表。

按键英文名称中文名称使用效果通配符
EnterHard return硬回车段落结束,另起一段^p
Shift + EnterSoft return软回车段落未完,转至下行^l

如下图所示,在 Microsoft® Word 每行的换行处,分别用 来表示软回车和硬回车。

在这里插入图片描述

题外话

  • 我对 Windows 存在很多偏见,比如它不完全遵循 POSIX 规范、不公开系统源代码11等,但不得不承认,以 Windows 为代表的 CR+LF 换行方式似乎更为科学(逻辑上),毕竟在早期的电传机里就能找到它的原型。

  • 原来的 macOS 还叫作 Mac OS X,但是在当时已有的 OS 里,例如 iOS 和 tvOS,都是以小写字母搭配 OS 来命名的。相比之下,Mac OS X 和 OS X 这种画风的命名就显得格格不入,一点都不符合 Apple 的风格。所以 Apple 决定将新版本的 OS 称作 macOS。所以就有了现在和谐统一的局面:iOS,watchOS,tvOS,macOS。
    (iPadOS 退出了直播间。)

  • 打字机不同于计算机。计算机的文字处理过程是非线性的,而打字机的文字处理过程是线性的,这意味着打字机中的出现的误操作通常是不可逆转的,一旦输错一个字符,很大程度上就意味着要重新编辑。后来,个人计算机的出现改变了这一局面,不仅如此,后来的音视频处理也实现了非线性化编辑,给依托磁带为载体的传统传媒业带来了巨大的影响,造福了广大媒体工作者。

参考资料:

Newline - Wikipedia

Teleprinter - Wikipedia

Vi Improved - Vim (PDF)

Hard Break (Return) vs. Soft Break (Shift+Enter) - PolicyStat Learning Center


  1. return ↩︎

  2. newline ↩︎

  3. 包括 OS X ↩︎

  4. feed 除了有“喂养”的含义外,还有“进入”和“供给”的意思。 ↩︎

  5. 巧合的是,在曾经红极一时的 GTA: VC 中,玩家回到车中对应的按键正是“回车”。 ↩︎

  6. 打字机滑架,托架 ↩︎

  7. 即 Teletype。在后文中,Teletype、typewriter、teletypewriter 或 teleprinter,皆统称为“打字机”,它们的区别不在本文的讨论范围内。 ↩︎

  8. 英文原文为“Colum one”,指该行第一列的位置 ↩︎

  9. 后来改名为 Mac OS X,又历经 OS X 最终演变为 macOS。 ↩︎

  10. 字符编码方案的制定可以追溯到二十世纪六十年代甚至更早,由于技术和经济条件上的限制,当时计算机的内存和储存并不像现在一样宽裕。计算机科学家和开发者们必须节省每一个字节,使得计算机资源的利用率达到最大值。
    字符编码方案的制定可以追溯到二十世纪六十年代甚至更早,由于技术和经济条件上的限制,当时计算机的内存和储存并不像现在一样宽裕。计算机科学家和开发者们必须节省每一个字节,使得计算机资源的利用率达到最大值。 ↩︎

  11. 开玩笑啦 ( ̄▽ ̄) ↩︎


http://chatgpt.dhexx.cn/article/hfbgpyyw.shtml

相关文章

图解回车和换行的区别

文章目录 1. 定义2. 图解3. 讨论4. 结论 1. 定义 中文英文简写HEXCharacterASCII回车Carriage returnCR0x0D\r13换行Line feedLF0x0A\n10 2. 图解 Win11 Experiment by Pycharm with Python 3.9 print(---)print(Hello World)print(---)# \rprint(Hello \r World)print(---…

不同系统下回车和换行的区别

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面…

python回车和换行的区别_回车与换行的区别(转)

add by zhj: 不同操作系统下换行符不同,如下: \n: UNIX \n\r: window \r: MAC OS 我们经常遇到的一个问题就是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的…

回车与换行的区别,CRLF、CR、LF详解(\r \n \r\n的区别)

先上结论 缩写ASCⅡ转义系统ASCⅡ值CR\rMacIntosh(早期的Mac)13LF\nUnix/Linux/Mac OS X10CR LF\r\nWindows 很长一段时间里,对于CRLF、CR、LF的理解仅限于不同操作系统下对换行符的定义。所谓知其然需知其所以然,从学习中找到乐…

回车符,换行符的区别

首先介绍一下“回车”(carriage return,’\r’)和“换行”(line feed,’\n’)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒…

换行和回车的区别

我们在看他们的区别时我们先看看他们的分别指的是什么&#xff1a; 回车<\r>(carriage return)&#xff1a;告诉打印机把打印头定位到左边界&#xff0c;就是指的&#xff0c;那个打印头重新放在这一行的开始。 换行<\n>(line feed)&#xff1a;告诉打印机把打印头…

回车符和 换行符的区别

首先介绍一下“回车”&#xff08;carriage return,’\r’&#xff09;和“换行”&#xff08;line feed,’\n’&#xff09;这两个概念的来历和区别。在计算机还没有出现之前&#xff0c;有一种叫做电传打字机&#xff08;Teletype Model 33&#xff09;的玩意&#xff0c;每秒…

回车符、换行符和回车换行符

我的CSDN主页My Python 学习个人备忘录我的HOT博 自学并不是什么神秘的东西&#xff0c;一个人一辈子自学的时间总是比在学校学习的时间长&#xff0c;没有老师的时候总是比有老师的时候多。             ——华罗庚 \r 、\n 和 \r\n 题目代码运行效果我的解题思路…

回车符与换行符的区别

引用了博客&#xff1a;https://blog.csdn.net/fanwenbo/article/details/54848429 这里是我自己做的实验&#xff0c;如下&#xff1a; printf("A is here!");printf("I am here!");putchar(\r);printf("First input!");putchar(\n);printf(&qu…

“回车”、“换行”浅谈

“回车”、“换行”浅谈 转义字符\r表示回车&#xff08;carriage return&#xff09;即回到行首&#xff0c;并没有包含换行的动作&#xff0c; \n表示换行&#xff08;line feed&#xff09;即移动到新的一行&#xff08;下一行&#xff09;。顺便提及&#xff0c;\b表示退格…

回车与换行符的区别及python中使用

一、区别 转载自http://www.pythontab.com/html/2017/linuxkaiyuan_0115/1116.html 1. 由来 在计算机还没有出现之前&#xff0c;有一种叫做电传打字机&#xff08;Teletype Model 33&#xff09;的机械打字机&#xff0c;每秒钟可以打10个字符。但是它有一个问题&#xff0c…

回车和换行的区别

回车和换行的区别 回车和换行的概念不同的系统间传递文件会涉及格式的转换Unix -> WindowsUnix <- Windows 回车和换行的概念 首先介绍一下“回车”&#xff08;carriage return,’\r’&#xff09;和“换行”&#xff08;line feed,’\n’&#xff09;这两个概念的来历…

在数组中查找指定元素 (15分)

int search( int list[], int n, int x ){int index -1;for(int i0;i<n;i){if(list[i] x){index i;break;}}return index; }

[PTA]习题8-2 在数组中查找指定元素

Spring-_-Bear 的 CSDN 博客导航 本题要求实现一个在数组中查找指定元素的简单函数。 函数接口定义&#xff1a; int search( int list[], int n, int x );其中 list[] 是用户传入的数组&#xff1b;n&#xff08;≥0&#xff09;是 list[] 中元素的个数&#xff1b;x 是待查…

[PTA]实验8-1-5 在数组中查找指定元素

Spring-_-Bear 的 CSDN 博客导航 本题要求实现一个在数组中查找指定元素的简单函数。 函数接口定义&#xff1a; int search( int list[], int n, int x );其中 list[] 是用户传入的数组&#xff1b;n&#xff08;≥ 0&#xff09;是 list[] 中元素的个数&#xff1b;x 是待…

习题8-2 在数组中查找指定元素

习题8-2 在数组中查找指定元素 (15 分) 本题要求实现一个在数组中查找指定元素的简单函数。 函数接口定义&#xff1a; int search( int list[], int n, int x );其中list[]是用户传入的数组&#xff1b;n&#xff08;≥0&#xff09;是list[]中元素的个数&#xff1b;x是待…

C语言刷题系列——9.在数组中查找指定元素

&#x1f6a9;实现一个在数组中查找指定元素的简单函数 &#x1f506;一) 题目要求&#x1f506;二) 题解 &#x1f506;一) 题目要求 函数接口定义&#xff1a;int search( int list[], int n, int x );其中list[]是用户传入的数组&#xff1b;n&#xff08;≥0&#xff09;是…

逻辑回归L1和L2正则化

正则化 正则化是用来防止模型过拟合的过程&#xff0c;常用的有L1正则化和L2正则化两种选项&#xff0c;分别通过在损失函数后加上参数向 量 的L1范式和L2范式的倍数来实现。这个增加的范式&#xff0c;被称为“正则项”&#xff0c;也被称为"惩罚项"。损失函数改变&…

【机器学习】L1正则化和L2正则化

L1正则化和L2正则化 在机器学习实践过程中&#xff0c;训练模型的时候往往会出现过拟合现象&#xff0c;为了减小或者避免在训练中出现过拟合现象&#xff0c;通常在原始的损失函数之后附加上正则项&#xff0c;通常使用的正则项有两种&#xff1a;L1正则化和L2正则化。L1正则…

什么是L1和L2正则化,以及它们有什么区别

一、L1和L2正则化是什么&#xff1f; 在防止过拟合的方法中有L1正则化和L2正则化&#xff0c;L1和L2是正则化项&#xff0c;又叫做惩罚项&#xff0c;是为了限制模型的参数&#xff0c;防止模型过拟合而加在损失函数后面的一项。 在二维的情况下&#xff0c;黄色的部分是L2和…