文档章节

【详解】回车 换行 0x0D 0x0A CR LF \r \n的来龙去脉

阿信sxq
 阿信sxq
发布于 2014/02/12 18:08
字数 1488
阅读 429
收藏 11

1、【回车和换行的历史】

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

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

 2、【关于回车和换行的更详细的解释】

首先,打字机打完一行,意味着,从左到右把一行的字打完了,此时打印机的打印头处于最右边,所以,想要继续打字,需要(1)将把打印头移动到最左边,然后(2)打字所用的纸张,换到下一行。

而(1)打印头移动到最左边的动作,称之为回车;

2)打字所用的纸张换到下一行,称之为换行。其是通过打字机的滚筒滚动,将纸向前滚动,就相当于打印头换了一行,处在新一行的最左边的开始的位置了,即所谓的走纸。

这就是“回车”和“换行”的来历,从它们的英语名字上也可以看出一二。

对应到计算机系统中:

回车:将当前光标移动到同一行中的最左边(假设是从左到右的输入方式)

换行:保持当前光标的水平位置位置不变,换到下一行。

因此,将回车和换行联合起来,才是我们所常理解的含义:

输入完一行后,回车换行到下一行,即光标不仅仅是回到了最左边,而且也换到了下一行。

3、【不同系统中表示回车换行含义所用字符不同】

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

不同的系统里面,对于同样一个回车换行的含义,所用的字符不同:

Table 1 不同系统中回车换行对应的字符

系统类型

回车换行所用字符

Linux/Unix

\n = Newline = 0x0A = 10 = LF =Line Feed = 换行 = Ctrl + J

Mac

\r = Return = 0x0D = 13 = CR = Carriage Return = 回车 = Ctrl + M

Windows/Dos

\r \n = 0x0D 0x0A = CR LF = 回车 换行

 

提示:

1. 对应的,在Linux中通过键盘输入Enter回车键,输入的是\n=0x0A, Windows中的Enter键则是输入的是0x0D 0x0A

2.其中关于0x0A对应的着Ctrl + J0x0D对应着Ctrl + M等等相关的ASCII的控制字符及输入方式,可参见:

ASCII字符集中的功能/控制字符

http://www.crifan.com/files/doc/docbook/char_encoding/release/html/char_encoding.html#ascii_ctrl_char

3.后来看到How to use regular expressions in Notepad++ (tutorial)中的解释得知,原来Mac 9及之前版本,是用EOL字符作为换行符的,OSX及之后,才开始用\n表示换行。

4、【由于回车换行在不同系统中所用不同字符所导致的问题及解决办法】

1. Linux中打开Windows中的文件

由于Linux用\n=0x0A=10=LF来表示换行,所以,打开Windows中的文件的时候,如果其中有换行,即其中有\r \n= 0x0D 0x0A,此时,就会被处理为,只将n理解为换行,而把r看作为一个单独的字符,此r字符,对应ASCII的值是0x0D=13,是个控制字符,对应的是用Ctrl+M=一个Ctrl加上一个大写的M字符,在Linux中的文本编辑器中,如Vi中,对应显示为一个“^M“。

 解决办法:

1Linux下,用命令:

tr-d"15"< myfile.txt > myfile_new.txt



将其中^M去除掉。其中15中的015是八进制的15=十进制的13=十六进制的0x0D

2)或者用dos2unix工具处理:

dos2unix file_name



详情参见:

【整理】如何取消Linux下,vi中显示的^M符号

http://www.crifan.com/order_how_to_cancel_under_linux_vi__m_symbol_in_the_display/

2. Mac中打开Windows中的文件

同理,Mac中打开Windows中的文件,如果有回车换行的话,只会识别其中的\r=0x0D,而将余下的\n=0xA=LF看成一个单独的字符,显示出“^J”。

3. Windows中打开MacLinux中的文件

经过测试,发现,在windows中,估计把原先的0x0D 0x0A去掉其中任何一个的话,然后用windows下的文本类编辑器再去打开,发现:

除了最简单的Windows自带的Notepad,无法正常识别回车换行,内容被显示到同一行中之外;其他一些编辑器,如Notepad2Notepad++Windows自带的记事本WordPad,都可以正常识别成回车换行,不会将内容都输出在同一行。

对应的,也可以通过Notepad++来实现在Linux,Windows,Mac这三种格式中来回转换,详情参考:

Notepad++中Windows,Unix,Mac三种格式之间的转换

http://www.crifan.com/files/doc/docbook/crifan_rec_soft/release/html/crifan_rec_soft.html#npp_func_windows_unix_mac

5、【引用】

1.  回车与换行的故事

http://huangyunbin.iteye.com/blog/1112171

2. Carriage return

http://en.wikipedia.org/wiki/Carriage_return

3. 回车和换行的区别

http://bbs.chinaunix.net/thread-393307-1-1.html

4. 回车和换行有什么区别?我们平时按下的Enter键是回车还是换行?[原创]

http://www.52rd.com/blog/Detail_RD.Blog_imjacob_12317.html

5. 【整理】回车(\r, return, CR, Carriage Return)和换行(\n, newline, LF, Line Feed)有什么区别

http://www.crifan.com/order_return__r_return_cr_carriage_return_and_line_feed__n_newline_lf_line_feed_what_is_the_difference/

© 著作权归作者所有

共有 人打赏支持
阿信sxq

阿信sxq

粉丝 225
博文 82
码字总数 72407
作品 1
成都
后端工程师
私信 提问
字符集与编码(八)——ASCII和ISO-8859-1

在前面其实也谈到了ASCII了,但并没有很具体,作为一个完整系列的一部分,还是有必要谈一下,也作为后面讨论的一些基础。 ASCII 它的全称是American Standard Code for Information Intercha...

国栋
2014/12/03
0
1
php中\r \r\n \t的区别

r 回车: 在Linux、unix 中表示返回到当行的最开始位置。 在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 n 的效果。 n 换行: 在Windows 中表示换行且回到下一行的最开...

Junn
2012/10/16
0
0
php---------字符串转义函数(addslashes,stripslashes)

在PHP中,有两个函数与字符串的转义有关,他们分别是 addslashes 和 stripslashes。 addslashes($string), 在指定的预定义字符前添加反斜杠 (),用于为存储在数据库中的字符串以及数据库查询...

切切歆语
01/16
0
0
google似乎把ADB输出的回车换行问题改掉了

google改动内容在这儿,没有测试过,看起来没问题。 到目前位置,市面上所有的Android设备,都存在这个这个小问题: 在Linux/Mac上执行adb命令输出什么东西时,就算是二进制输出,那么LF(0x...

Q_J
2015/06/10
0
0
Windows XP下超级终端与嵌入式开发板交互的一些技巧

Windows XP下超级终端与嵌入式开发板交互的一些技巧 嵌入式开发交流群280352802,欢迎加入! 一、简介 超级终端是Windows操作系统自带的一个通用的串行交互软件,可以通过这个工具对路由器交...

长平狐
2013/06/03
163
0

没有更多内容

加载失败,请刷新页面

加载更多

centos安装confluence全攻略

https://blog.csdn.net/qwer026/article/details/51439076

happyeveryday32
19分钟前
2
0
30 行 Javascript 代码搞定智能家居系统

本文首发于『阿里云 IoT 开发者社区』,更多精彩物联网内容欢迎前往浏览。 智能家居可谓是今年物联网的热门领域,通过智能单品和智能音箱,人们已然把『智能』两个字变成了生活的理所应当。搭...

阿里云官方博客
22分钟前
2
0
sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
30分钟前
1
0
HIVE数据倾斜总结

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,...

瑞查德-Jack
40分钟前
0
0
Pure-ftpd搭建FTP

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 使用pure-ftpd搭建FTP服务 轻量的ftp软件 安装pure-ftpd并修改配置文件 # pure-ftpd为epel扩展库里的软件[root...

robertt15
49分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部