CR, LF, CR/LF 回车 换行

本文介绍了不同操作系统中使用的换行符(CR, LF, CR/LF)的起源及其背后的技术原因。详细解释了这些换行符如何影响跨平台文件传输,并提供了避免问题的方法。


在计算机还没 有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正 好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即"\n";Windows系统里面,每行结尾是“<换行><回车 >”,即“\n\r”;Mac系统里,每行结尾是“<回车>”,即"\r";。一个直接后果是,Unix/Mac系统下的文件在 Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。



在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.
Dos和windows采用回车+换行CR/LF表示下一行, 
而UNIX/Linux采用换行符LF表示下一行,
苹果机(MAC OS系统)则采用回车符CR表示下一行.
CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D; 
LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A.
所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.
一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件.
在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错.
很多文本/代码编辑器带有换行符转换功能, 使用这个功能可以将文本文件中的换行符在不同格式单互换.
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化. 如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本.

 

### CR LF 技术含义 CR LF 是两个 ASCII 控制字符的缩写,分别代表回车(Carriage Return, CR, \r)和换行(Line Feed, LF, \n)。在计算机系统中,这两个字符通常组合使用来表示文本中的一行结束并开始新的一行。CR LF(\r\n)的组合最初来源于打字机的操作机制,其中 CR 用于将光标移回行首,而 LF 用于将纸张上移一行。在现代计算环境中,这种组合被广泛用于表示换行符。 ### 应用场景 #### 不同操作系统中的换行符 在不同的操作系统中,CR LF 的使用有所不同: - **Windows 系统**:使用 CR+LF(\r\n)作为换行符。这种选择是为了保持与早期 MS-DOS 系统的兼容性,后者也采用了 CR+LF。 - **UNIX/Linux 系统**:仅使用 LF(\n)作为换行符。这是因为在早期的 UNIX 设计中,设计者认为只需要一个字符来表示行的结束[^1]。 - **Mac OS 9 及之前版本**:使用 CR(\r)作为换行符;然而,从 Mac OS X 开始,苹果公司转向了 UNIX 基础,因此改用 LF(\n)作为换行符[^1]。 #### 串口通信中的数据帧定界 除了在文本处理中的应用外,CR LF 在串口通信中也有重要作用。它们可以用来作为数据帧的边界标识符,帮助接收方正确解析发送方发送的数据流。通过识别特定的 CR LF 序列,接收设备能够准确地确定一个数据包的结束和下一个数据包的开始,这对于确保数据传输的完整性至关重要[^1]。 #### 网络协议中的使用 在许多网络协议中,如 HTTP 和 SMTP,CR LF 被用作消息头字段之间的分隔符以及消息体的开始标志。例如,在 HTTP 协议中,每个头部字段后跟一个 CR LF,而头部与主体之间则由两个连续的 CR LF 分隔。这种方式确保了客户端和服务器之间能够高效、准确地解析请求和响应消息。 #### 文件传输 当文件在不同操作系统之间传输时,处理 CR LF 的差异变得尤为重要。FTP 等文件传输协议提供了 ASCII 模式和二进制模式的选择。在 ASCII 模式下,传输过程中会自动转换换行符以适应目标系统的标准;而在二进制模式下,则不会进行任何转换,适用于非文本文件的传输。 ```python # 示例:检测文件中的换行符类型 def detect_line_endings(file_path): with open(file_path, 'rb') as file: content = file.read() if b'\r\n' in content: return 'Windows (CRLF)' elif b'\n' in content: return 'Unix/Linux (LF)' elif b'\r' in content: return 'Old Mac (CR)' else: return 'Unknown' print(detect_line_endings('example.txt')) ``` ### 结论 CR LF 不仅是简单的文本格式化工具,它还在多种技术领域中扮演着重要角色,包括但不限于操作系统设计、串口通信、网络协议和文件传输。了解不同环境下的 CR LF 使用习惯对于开发跨平台应用程序和解决相关技术问题具有重要意义。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值