说明:本文仅供学习交流,转载请标明出处,欢迎转载!
将windows下编写的一个txt文件在Linux下打开的时候发现每行行末都会多出^M,而将Linux编写的一个txt文件在windows下打开时发现所有的内容都在一行显示,原本在Linux下是分了行的,为什么会出现这种现象呢?其实这与windows和Linux对换行符的标志不一样而已。
在介绍两者系统的换行符之前,先介绍下回车与换行的概念。
回车:CR,在文本中显示为^M,在字符串中对应为‘\r‘,r表示return;
换行:LF,在文本中显示为$,在字符串中对应为‘\n‘,n表示next。
Windows中断行字符
Windows觉得换行应该要做两件事:第一是要将读写针头跑到下一行(换行);第二则是要在下一行从头开始读写(回车),所以windows一直都是用 CR+LF表示换行的意思,字符为‘\r\n‘。
Linux中的断行字符
早起的Unix闲用两个字符(CR+LF)表示表示换行麻烦,就只采用后者LF(mac系统则独树一帜,采用前者CR表示换行符)。所以Linux采用的换行字符为‘\n‘。
总结:Window中的断行字符为‘\r\n‘,Linux中的断行字符为‘\n‘,mac的断行字符为‘\r‘。
既然Linux和Windows的断行字符不一致,那么问题就来了。两者在相互读取问题的时候,则会出现向本文开头那样的问题:Linux系统读windows系统下编写的txt文件时,会在每行的末尾多一个^M(即多了‘\r‘);而windows系统下读取Linux下编写的txt文件时,所有的内容都在同一行(因为缺少\r)。
在Linux下提供了一组命令,来相互转化windows后Linux下的文件.
dos2UNIX命令:将Windows文件-->Linux文件;
UNIX2dos命令:将Linux文件--->Windows文件;
两个参数:
-k:(keep)保留原来文件的最近修改时间参数,即本次转化不算修改内容,mtime不变;
-n 旧文件名 新文件名:(new)保留旧文件,将转化后的文件输出到新文件。
Notice:在Linux系统下读取Windows文件时,一定要先采用dos2UNIX命令转化下;将Linux下编写的文件传给Windows文件时,一定要先用UNIX2dos转化下。