主要摘录自2篇blog:

http://www.cnblogs.com/clarkchen/archive/2011/06/02/2068609.html

http://www.360doc.com/content/12/1212/13/3735408_253588368.shtml

首先介绍一下常见的2个字符:

  回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return
  换行 \n 本义是光标往下一行(不一定到下一行行首),n的英文newline,控制字符可以写成LF,即Line Feed

当最初接触windows下C语言时候我们会强制记住\r\n这种使得输出文本换行的手段;紧接着到了linux环境(后来又是mac)我们使用\n换行,在利用文本在不同平台交换数据或者代码时会出现错误。

首先确定不同平台上的规定:

\n:  UNIX 系统行末结束符

\n\r: window 系统行末结束符

\r:  MAC OS 系统行末结束符

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

出现这种情况有其历史原因:

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

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

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

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

在平时工作中解决此历史问题的方法如下:

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“。

解决办法:

(1)Linux下,用命令:

  tr -d "\015" < myfile.txt > myfile_new.txt

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

(2)或者用dos2unix工具处理:

  dos2unix < file.txt>

详情参见:

【整理】如何取消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”。

  如果使用vi可以利用s命令替换每一行的末尾字符为空。

3. Windows中打开Mac或Linux中的文件

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

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

因此对于程序员来讲从显示角度是不会有大的影响。

  

换行(\r)和回车(\n)的更多相关文章

  1. 【转载】 C++中回车换行(\n\r)和换行(\r)的区别

    原文:http://blog.csdn.net/xiaofei2010/article/details/8458605 windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回 ...

  2. 计算机中的换行符、回车符、\n、\r、\n\r 怎么区分啊?

    '\r'是回车,前者使光标到行首,(carriage return)'\n'是换行,后者使光标下移一格,(line feed) \r 是回车,return\n 是换行,newline对于换行这个动作, ...

  3. Windows、Unix、Mac不同操作系统的换行问题-剖析回车符\r和换行符\n

    转载链接:http://blog.csdn.net/tskyfree/article/details/8121951 一.概念: 换行符‘\n’和回车符‘\r’ (1)换行符就是另起一行  --- ' ...

  4. python中换行,'\r','\n'及'、'\r\n'

    '\r'的本意是回到行首,'\n'的本意是换行. 所以回车相当于做的是'\r\n'或者'\n\r'.'\r'就是换行并回行首, '\n'就是换行并回行首,用'\r\n'表示换行并回行首. window ...

  5. sqlserver数据库 去除字段中空格,换行符,回车符(使用replace语句)

    SQL中可以使用Replace函数来对某个字段里的某些字符进行替换操作,语法如下: 语法 REPLACE ( original-string, search-string, replace-strin ...

  6. c# 以换行(\r\n)拆分字符串

    c# 以换行(\r\n)拆分字符串 字符串数组形式: string[] striparr = strip.Split(new string[] { "\r\n" }, String ...

  7. 替换SQL字段中的换行符,回车符

    替换SQL字段中的换行符,回车符: 在富文本内容中通常会出现回车.换行内容.在sql数据库中这些回车.换行符,输出html后,表现为空格. 这里是在数据导出.导入中发现的,通常把回车.换行符找出来,用 ...

  8. \r\n 回车换行浅析

    \r \ 10 x0a return \n \ x0d newline Unix系统里,每行结尾只有“<换行>”,即“\n”: Windows系统里面,每行结尾是“<回车>&l ...

  9. \r\n回车换行\r回车\n换行的区别

    在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候 ...

随机推荐

  1. 关于odbc的彻底删除问题

    最近在装一个软件,由于第一次安装产生了一个错误,于是我尝试在卸载之后,重新进行安装~但是,在安装过程当中出现了一个问题. NEWLRE ODBC data source already exists. ...

  2. Python语法二

    1.raw_input 输入 2.如果想查看某个关键字的用法,可以在命令行输入pydoc raw_input. 如果是windows,那么试一下 python -m pydoc raw_input 3 ...

  3. web初学之JavaBean

    JavaBean 1.javaBean类:特殊的java类,以封装和重用为目的.通常JavaBean与Jsp搭配使用构成JavaBean技术. (1)JavaBean的规范: ●JavaBean是个公 ...

  4. 100 Door Puzzle

    问题重述: There are 100 doors in a long hallway. They are all closed. The first time you walk by each do ...

  5. iOS调试

    iOS高效调试 写代码难免出现bug.储备些调试技能绝对能够提高你的工作效率,让bug无所遁形.下面就和大家分享一些我在工作中常用的iOS调试小技能. 1. 打印 最简单,基础的调试方法就是打印日志了 ...

  6. js获取IP和MAC地址

    1.IP 百度一下有很多 可以用这个 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> ...

  7. centos配置vpn服务器

    1.配置epel软件源wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm2.安装PPTP服务端软件yu ...

  8. win8 系统无法正常安装.net framework 2.0和3.0框架如何解决

    在安装.net framework2.0框架的时候一直提示要用户从网上面下载框架,你点击下载好的安装包也是无法安装的.这个时候就需要你使用离线的安装包来进行问题的解答附件在此http://pan.ba ...

  9. 如何得到EF(ADO.NET Entity Framework)查询生成的SQL? ToTraceString Database.Log

    ADO.NET Entity Framework ToTraceString  //输出单条查询 DbContext.Database.Log  //这里有详细的日志

  10. IT青年深圳销售求职经历

    今年五月份,辞掉了一份月薪5k ,没有加班,双休,福利不错的IT工作,我始终觉得这样的工作太过平稳,没有任何激情,虽然没想好接下来的路怎么走,但是最终我还是选择了裸辞.在所在的城市玩了半个月,算是作最 ...