一、区别
换行符:
1.windows中的换行符是\r\n,
2. linux/unix下的换行符是\n。
其中:
回车符:\r=0x0d (13) return; #回车(carriage return)
换行符:\n=0x0a (10) newline。#换行(newline)
二、文件格式互转命令
1.unix2dos:将具有unix风格的格式文件转化为具有window下的格式文件。
2.dos2unix:将具有windows风格的格式文件转化为unix下的格式文件。
两个命令的具体用法参见man手册。
三、回车换行符的历史背景
早期的计算机输出设备不是显示器,而是电传打字机,结构与普通的打字机差不多。有一个打印头在纸上打字,同时有一个电动机控制纸张的进出。当打印头到达行尾的时候,需要两个动作才能够到达下一行的行首:首先执行回车动作,将打印头移动到本行的行首,然后进行换行动作,电动机将纸张向上移动一行,这样打印头就处于下一行的行首,可以继续进行打印。回车和换行对应的控制字符分别是\r和\n,这就是windows中换行符为\r\n的由来。后来由于经常连续执行,所以在打印机中将这两个控制字符简化为一个控制字符,这就是linux/unix中的换行符\n的由来。
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“ <回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号.
四、引起的现象和问题:
1.问题一
做一个日志文件的时候发现由printWriter写出来的文件在windows上打开 是混乱的,因为在linux下执行printLn方法时 写入的换行符是\n ,在windows没法识别\r\n才能被认为是换行
2. 问题二
有时在WIN下编辑好的脚本文件上传到LINUX服务器中不能正常执行,开始误认为是LINUX配置问题,后来发现,是WIN与LINUX存储文件时的换行符标志不同造成的。在DOS使用的换行符为 ^M$,我们称为CR与LF两个符号。而在Linux中,则仅有LF ($) 这个换行符。
可以用如下命令完成格式转换:$dos2unix,$unix2dos。但这两个命令在Ubuntu发行版本中不存在,可通过:
$sudo apt-get install tofrodos
命令安装。之后,再次使用如下文所示的格式即可。
[root@linux ~]# dos2unix [-kn] file [newfile]
[root@linux ~]# unix2dos [-kn] file [newfile]
参数:
-k : 保留该文件原来的mtime时间格式(不更新文件上次内容经过修改的时间)
-n : 保留原来的旧文件,将转换后的内容输出到新文件,如:dos2unix -n old new
范例:
范例一:将提供的hosts文件格式更新为dos格式。
[root@linux ~]# unix2dos -k hosts
unix2dos: converting file hosts to DOS format ...
# 此时hosts文件的时间不会改变,但内容主要将换行符修改成为DOS的CRLF了。
范例二:将范例一已经变成DOS格式的hosts改名为hosts.dos,并且转换Linux
格式到hosts.linux
[root@linux ~]# mv hosts hosts.dos
[root@linux ~]# dos2unix -k -n hosts.dos hosts.linux
dos2unix: converting file hosts.dos to file hosts.linux in UNIX format ...
[root@linux ~]# ll
-rw-r--r-- 1 root root 288 Aug 1 13:30 hosts.dos
-rw------- 1 root root 279 Aug 1 13:30 hosts.linux
# 由于DOS格式中多了CR字符,所以,文件比较大。
3. 现象三
先生成一个换行(\n, 0x0A)和回车(\r, 0x0D)组合的文本
$ echo -en '12\n34\r56\n\r78\r\n' > tmp
$ od -t x1 tmp
0000000 31 32 0a 33 34 0d 35 36 0a 0d 37 38 0d 0a
0000016
在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。写程序时可能得到一行,将其进行trim掉'\r',这样能得到你所需要的string了。
'\n' 10 换行(newline)
'\r' 13 回车(return)
最后:
ctrl+M: ^M 也称回车键
相关推荐
- - 使用此工具,必须有明确的行分隔符标记,且换行符标记不可在字符串中出现。否则无法使用,需要修改匹配搜索方式 ### 工具效率: 亲测200M文件5s中完成转换。 ### 使用示例: Windows: go_readfileline.exe...
标题“Linux和Windows中的换行符差异问题”指的是在Linux和Windows操作系统中,文本文件的换行方式存在差异,导致跨平台操作时可能会遇到显示不正常的问题。在Linux系统中,每行的结束通常只使用一个换行符(LF,...
由于不同编程语言和平台之间换行符的不同,当数据在不同环境间传递时,需要注意换行符的转换问题。例如,当Java程序处理VBScript中的换行符时,需要将VBScript中的`chr(10)chr(13)`转换为Java中的`\r\n`或`\n`。可以...
由于Linux和Windows文件系统所定义的换行符不同,所以从Linux或Android到Windows的文件需要转换一下换行符。 是一个很使用的小工具。 由本人亲自编写,本来在网上下载过别人写的工具,真是很扯淡。一气之下,本人就...
在Linux或类Unix系统中,每行文本结束时使用的是单一的换行符(\n)。相反,Windows系统使用的是回车换行符组合(\r\n)来标记行的结束。这就导致了当一个在Linux环境下创建的文本文件在Windows中打开时,可能会出现...
- 对于不同平台的文本处理,需要注意不同的换行符(Windows使用`\r\n`,Unix/Linux使用`\n`)。 通过以上知识点的详细解析,我们可以了解到Java中去除字符串中的空格、回车、换行符、制表符的具体实现方式及其应用...
对于已有的ZIP文件,你可以在Linux下先用`file`命令检查其格式,然后根据情况使用`dos2unix`或`fromdos`等工具转换文件中的换行符,然后再尝试解压。 总的来说,跨平台的文件操作需要注意文件编码和格式的兼容性。...
在这个例子中,无论程序运行在Windows、Linux还是Mac上,`System.lineSeparator()`都会返回对应系统的正确换行符,使得输出的“Hello”和“World”之间始终能正确换行。 另外,如果你需要在字符串中硬编码特定操作...
在Linux系统中,每行文本的结束是以一个换行符(LF)表示的,而在Windows系统中,每行的结束则由两个字符组成:回车符(CR)和换行符(LF)。这种差异在跨平台操作时可能会导致文本文件显示不正常,例如,Windows下...
回车换行符(CR+LF)在不同操作系统中表示新行的方式可能不同,例如在Windows系统中是两个字符(\r\n),而在Unix或Linux系统中仅使用一个字符(\n)。因此,当跨平台处理文本时,可能会出现显示问题,此时就需要...
这主要是因为Visual Studio默认会保留Windows平台下的换行符(CR+LF),而在Linux系统中,正确的换行符应该是LF(仅换行)。使用专门的文本编辑器可以更好地调整文件格式,确保代码能够在目标平台上正确编译和运行。 ##...
在 Linux 和 Windows 平台下,我们可以通过试验来证明回车符和换行符的意义。例如,在 Linux 下,我们可以使用 sprintf 函数来生成一个字符串,并使用 printf 函数来打印输出。在这个例子中,我们可以看到,回车符...
在Java编程语言中,换行符是用来在文本输出中创建新行的特殊字符或序列。在不同的操作系统中,换行的表示方式有所不同。在本文中,我们将深入探讨Java中实现换行的三种常见方法以及与换行符相关的背景知识。 1. ...
不少开发者可能遇到过这个...而git入库的代码采用的是LF格式,它考虑到了跨平台协作的场景,提供了“换行符自动转换”的功能:如果在Windows下安装git,在拉取文件时,会自动将LF换行符替换为CRLF;在提交时,又会将C
在Linux下创建的文本文件通常会在每一行末尾包括一个换行符,包括最后一行,而在Windows下创建的文件,最后一行可能不包含换行符。 为了处理这些兼容性问题,可以使用工具如`sed`来转换文件中的换行符格式,使其...
在Windows系统中,文本文件的换行通常使用CRLF(Carriage Return, Line Feed,即回车加换行)组合,而在Unix和Linux系统中,只使用LF(Line Feed,换行)作为换行符。这两种不同类型的换行符在跨平台交互时可能导致...
在Linux与Windows双系统环境下,通常情况下Linux的引导程序会接管整个启动过程。当用户选择启动Windows时,该程序会通过一系列指令将控制权传递给Windows的启动扇区。但如果由于某些原因(例如误删除或修改了关键...
本教程将详细解释如何配置Log4j,使其在不同操作系统环境下(Windows和Linux)都能统一将日志打印到`user.dir`目录下,避免因路径分隔符差异带来的问题。 首先,了解`user.dir`系统属性。在Java中,`user.dir`代表...
例如,当在Windows环境下打开一个纯UNIX格式的文本文件时,由于文件中只有换行符(LF),没有回车符(CR),因此Windows系统默认的记事本程序无法识别正确的换行位置,导致所有文本内容被显示在一行内,造成阅读困难...