CRLF、CR、LF详解

很长一段时间里,对于CRLF、CR、LF的理解仅限于不同操作系统下对换行符的定义。所谓知其然需知其所以然,从学习中找到乐趣,对知识的记忆才会更加深刻。

名词解释

  • CR:Carriage Return,对应ASCII中转义字符\r,表示回车
  • LF:Linefeed,对应ASCII中转义字符\n,表示换行
  • CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行

众所周知,Windows操作系统采用两个字符来进行换行,即CRLF;Unix/Linux/Mac OS X操作系统采用单个字符LF来进行换行;另外,MacIntosh操作系统(即早期的Mac操作系统)采用单个字符CR来进行换行。

野史

老式机械打字机(来源:视觉中国)

据野史记载,在很久以前的机械打字机时代,CR和LF分别具有不同的作用:LF会将打印纸张上移一行位置,但是保持当前打字的水平位置不变;CR则会将“Carriage”(打字机上的滚动托架)滚回到打印纸张的最左侧,但是保持当前打字的垂直位置不变,即还是在同一行。

当CR和LF组合使用时,则会将打印纸张上移一行,且下一个打字位置将回到该行的最左侧,也就是我们今天所理解的换行操作。

随着时间的推移,机械打字机渐渐地退出了历史舞台,当初的纸张变成了今天的显示器,打字机的按键也演变为了如今的键盘。在操作系统出现的年代,受限于内存和软盘空间的不足,一些操作系统的设计者决定采用单个字符来表示换行符,如Unix的LF、MacIntosh的CR。他们的意图都是为了进行换行操作,只是当初并没有一个国际标准(或者其他原因,鬼知道),所以才有这样字符上的不同。

结论

许多现代的文本编辑器和命令行工具都提供了可选择的换行符配置,方便用户按照自己的意愿来改变换行符的表现形式,所以我们只需要知道CRLF、CR、LF的作用即可。

参考文献

http://en.wikipedia.org/wiki/Newline
https://en.wikipedia.org/wiki/Control_character
https://stackoverflow.com/questions/1552749/difference-between-cr-lf-lf-and-cr-line-break-types

https://www.jianshu.com/p/b03ad01acd69

cr和lf是分别编码的控制字符。0x0D(小数13)及0x0A(小数10)。

它们用于标记文本文件中的中断行。正如您所指出的,Windows使用两个字符CRLF序列;Unix只使用LF,旧的MacOS(PreOSX MacIntosh)使用CR。

一种虚构的历史观:

如彼得所示,CR=回程和LF=线路进给,两种表达方式都源于旧打字机/TTY。LF将纸张向上移动(但水平位置保持相同),CR将返回“回车”,以便下一个输入的字符位于纸张上最左边的位置(但在同一行上)。CR+LF正在做这两件事,即准备输入一个新行。随着时间的推移,这些代码的物理语义是不适用的,而且由于内存和软盘空间非常昂贵,一些OS设计人员决定只使用其中一个字符,只是彼此之间的通信不太好;-)

大多数现代文本编辑器和面向文本的应用程序提供了选项/设置等,这些选项/设置允许自动检测文件的行尾约定并相应地显示它。

这是我发现的一个很好的总结:

载运返回(CR)字符(0x0D\r)将光标移动到行的开头,而不前进到下一行。这个字符被用作商品和早期Macintosh操作系统(OS-9及更早版本)中的新行字符。

行馈(LF)字符(0x0A\n)将光标向下移动到下一行,而不返回行的开头。此字符用于UNIX系统(Linux、MacOSX等)中的新行字符。

行尾(EOL)序列(0x0D 0x0A\r\n)实际上是两个ASCII字符,CR和LF字符的组合。它将光标移动到下一行和该行的开头。此字符在大多数其他非Unix操作系统中用作新行字符,包括Microsoft Windows、Symbian OS和其他操作系统。

CRLF、CR、LF详解相关推荐

  1. Linux—CRLF/CR/LF等回车换行符问题详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   在开发阶段,开发环境测完的配置文件(页面化管理)和shell脚本在上生产时,出现了字符和变量(变量从配置文件中获取)拼接缺失等莫 ...

  2. linux 字符串lf个数,CRLF、CR、LF详解

    很长一段时间里,对于CRLF.CR.LF的理解仅限于不同操作系统下对换行符的定义.所谓知其然需知其所以然,从学习中找到乐趣,对知识的记忆才会更加深刻. 名词解释 CR:Carriage Return, ...

  3. crlf换行 idea_Git中换行符(CRLF、LF和CR)的转换

    团队协作开发中, 使用Windows系统电脑的朋友,在提交代码到Git版本库时,是否遇到过关于CRLF.LF的警告! 一.关于CR.LF和CRLF 敲下回车键,不同的操作系统保存到文件中的值不同,换行 ...

  4. Newline —— CRLF、LF、CR回车和换行

    节选自Newline - Wikipedia: CR LF 说明节选自Newline History - Wikipedia历史回顾 "解决的办法是让换行符有两个字符:用CR将打印头移动到第 ...

  5. HTTP协议详解(真的很经典)

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  6. 【SVN】linux下svn命令参数详解(二)

    svn全部子命令详解 1.svn help 2.svn add 3.svn blame 4.svn cat 5.svn changelist 6.svn checkout 7.svn cleanup ...

  7. Http 协议详解笔记

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  8. Http协议 详解(转载)

    http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分 ...

  9. 【转】HTTP协议详解

    原文地址:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html 一.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则 ...

  10. 【HTTP协议】超详细的HTTP协议详解

    基本介绍 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/ ...

最新文章

  1. 7.08 计算累计差
  2. JVM调优总结(7):调优方法
  3. 深入浅出设计模式原则之迪米特法则(LoD)
  4. confluence5.8.10的使用
  5. LeetCode-二叉树算法总结-层次遍历,路径总和等
  6. ffmpeg 纯静态编译,以及添加自定义库流程摘要
  7. MFC小笔记:控件随窗口变化
  8. 【截至2006.12.31】毒霸反间谍可清除的部分流氓软件清单
  9. java 获取下拉框的值_java中怎么获取下拉框的值
  10. Java大数据-Week2-Day2面向对象进阶
  11. DBeaver - 一款免费开源的通用数据库工具
  12. Trapcode Particular 5(合集·中英对照)
  13. springboot整合高德地图获取经纬度和地址
  14. 堆转存目录/tmp或日志目录/var/log可用空间小于 10.0 吉字节。
  15. dw编写手机版html,手机移动网页制作:用
  16. win10msmpeng占内存_win10内存占用率太高怎么办
  17. 阿里云acp认证, 阿里云acp考试介绍
  18. iOS新知识学习之React Native开发工具集
  19. 《AngularJS深度剖析与最佳实践》一2.12 单元测试
  20. Python 根据身份证号计算生日,年龄和性别

热门文章

  1. 【软件工程】——项目开发计划
  2. 移动端车牌识别sdk——技术干货
  3. 微信小程序上传图片失败总结
  4. 前端必知:微信小程序如何引入阿里图标
  5. 表单进阶 单选框 多选框
  6. 快速查看是哪个文件占用空间大
  7. 3Ds max彻底卸载方法
  8. ue4导入abc文件问题
  9. Windows 删除系统恢复分区
  10. 申通核心业务系统上云战役