`
free_kingdom
  • 浏览: 42963 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

换行符在Linux和Windows下的区别

 
阅读更多

一、区别

换行符:

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手册。

 

windows的换行符是\r\n Linux采用的是\n
可以采用unix2dos或dos2unix转换文本文件 


三、回车换行符的历史背景
早期的计算机输出设备不是显示器,而是电传打字机,结构与普通的打字机差不多。有一个打印头在纸上打字,同时有一个电动机控制纸张的进出。当打印头到达行尾的时候,需要两个动作才能够到达下一行的行首:首先执行回车动作,将打印头移动到本行的行首,然后进行换行动作,电动机将纸张向上移动一行,这样打印头就处于下一行的行首,可以继续进行打印。回车和换行对应的控制字符分别是\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
 
五、编程相关
 
文本文件的行结束符,传统上 PC机 用 CRLF,苹果机用CR,unix 用 LF。【CR -- 回车符,c语言'\r'】。【LF -- 换行符, c语言'\n'】。
不同计算机上c语言统一规定为::文本文件的行结束符一律变成一个符号LF,也就是换行符,也就是new line符, 也就是'\n'. “回车和换行符转换成一个换行符”
-- 对PC机而言,文本文件行结束符,CRLF读入后,丢掉CR,留 LF. 例如fgets() 读入一行,行尾只有LF,没有CR.

在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。写程序时可能得到一行,将其进行trim掉'\r',这样能得到你所需要的string了。

'\n' 10 换行(newline)
'\r' 13 回车(return)

 

最后:

ctrl+M: ^M 也称回车键

分享到:
评论

相关推荐

    去除数据中字符串的换行符;解决ETL中字符串换行符;ORACLE|DB2

    - - 使用此工具,必须有明确的行分隔符标记,且换行符标记不可在字符串中出现。否则无法使用,需要修改匹配搜索方式 ### 工具效率: 亲测200M文件5s中完成转换。 ### 使用示例: Windows: go_readfileline.exe...

    Linux和windows中的换行符差异问题.docx

    标题“Linux和Windows中的换行符差异问题”指的是在Linux和Windows操作系统中,文本文件的换行方式存在差异,导致跨平台操作时可能会遇到显示不正常的问题。在Linux系统中,每行的结束通常只使用一个换行符(LF,...

    Java,JavaScript,Oracle,MySql,VBscript的换行符

    由于不同编程语言和平台之间换行符的不同,当数据在不同环境间传递时,需要注意换行符的转换问题。例如,当Java程序处理VBScript中的换行符时,需要将VBScript中的`chr(10)chr(13)`转换为Java中的`\r\n`或`\n`。可以...

    Linux 或Android 到Windows文本文件换行符处理程序

    由于Linux和Windows文件系统所定义的换行符不同,所以从Linux或Android到Windows的文件需要转换一下换行符。 是一个很使用的小工具。 由本人亲自编写,本来在网上下载过别人写的工具,真是很扯淡。一气之下,本人就...

    把Linux中的文本文件格式转为Windows的

    在Linux或类Unix系统中,每行文本结束时使用的是单一的换行符(\n)。相反,Windows系统使用的是回车换行符组合(\r\n)来标记行的结束。这就导致了当一个在Linux环境下创建的文本文件在Windows中打开时,可能会出现...

    java去除字符串中的空格、回车、换行符、制表符的小例子.docx

    - 对于不同平台的文本处理,需要注意不同的换行符(Windows使用`\r\n`,Unix/Linux使用`\n`)。 通过以上知识点的详细解析,我们可以了解到Java中去除字符串中的空格、回车、换行符、制表符的具体实现方式及其应用...

    windows下压缩的zip文件,上传到Linux后unzip不认的解决办法

    对于已有的ZIP文件,你可以在Linux下先用`file`命令检查其格式,然后根据情况使用`dos2unix`或`fromdos`等工具转换文件中的换行符,然后再尝试解压。 总的来说,跨平台的文件操作需要注意文件编码和格式的兼容性。...

    java 换行符.docx

    在这个例子中,无论程序运行在Windows、Linux还是Mac上,`System.lineSeparator()`都会返回对应系统的正确换行符,使得输出的“Hello”和“World”之间始终能正确换行。 另外,如果你需要在字符串中硬编码特定操作...

    Linux到WINDOWS文本文件转换程序

    在Linux系统中,每行文本的结束是以一个换行符(LF)表示的,而在Windows系统中,每行的结束则由两个字符组成:回车符(CR)和换行符(LF)。这种差异在跨平台操作时可能会导致文本文件显示不正常,例如,Windows下...

    文本回车换行符批量替换工具 繁简体字转换工具

    回车换行符(CR+LF)在不同操作系统中表示新行的方式可能不同,例如在Windows系统中是两个字符(\r\n),而在Unix或Linux系统中仅使用一个字符(\n)。因此,当跨平台处理文本时,可能会出现显示问题,此时就需要...

    Windows代码移植到Linux

    这主要是因为Visual Studio默认会保留Windows平台下的换行符(CR+LF),而在Linux系统中,正确的换行符应该是LF(仅换行)。使用专门的文本编辑器可以更好地调整文件格式,确保代码能够在目标平台上正确编译和运行。 ##...

    彻底搞清回车(0x0d)和换行(0x0a)

    在 Linux 和 Windows 平台下,我们可以通过试验来证明回车符和换行符的意义。例如,在 Linux 下,我们可以使用 sprintf 函数来生成一个字符串,并使用 printf 函数来打印输出。在这个例子中,我们可以看到,回车符...

    关于 java中的换行符

    在Java编程语言中,换行符是用来在文本输出中创建新行的特殊字符或序列。在不同的操作系统中,换行的表示方式有所不同。在本文中,我们将深入探讨Java中实现换行的三种常见方法以及与换行符相关的背景知识。 1. ...

    GIT 换行符自动转换导致整个文件被修改的解决方案

    不少开发者可能遇到过这个...而git入库的代码采用的是LF格式,它考虑到了跨平台协作的场景,提供了“换行符自动转换”的功能:如果在Windows下安装git,在拉取文件时,会自动将LF换行符替换为CRLF;在提交时,又会将C

    windows和linux、Mac系统换行规则的区别.docx

    在Linux下创建的文本文件通常会在每一行末尾包括一个换行符,包括最后一行,而在Windows下创建的文件,最后一行可能不包含换行符。 为了处理这些兼容性问题,可以使用工具如`sed`来转换文件中的换行符格式,使其...

    对源码自动加上utf8 bom头,并修改换行符为unix换行

    在Windows系统中,文本文件的换行通常使用CRLF(Carriage Return, Line Feed,即回车加换行)组合,而在Unix和Linux系统中,只使用LF(Line Feed,换行)作为换行符。这两种不同类型的换行符在跨平台交互时可能导致...

    linux与windows双系统启动失败处理解决办法

    在Linux与Windows双系统环境下,通常情况下Linux的引导程序会接管整个启动过程。当用户选择启动Windows时,该程序会通过一系列指令将控制权传递给Windows的启动扇区。但如果由于某些原因(例如误删除或修改了关键...

    java log4j统一打印在user.dir目录下(windows、linux通用、不用考虑不同操作系统分隔符不一致的情况)

    本教程将详细解释如何配置Log4j,使其在不同操作系统环境下(Windows和Linux)都能统一将日志打印到`user.dir`目录下,避免因路径分隔符差异带来的问题。 首先,了解`user.dir`系统属性。在Java中,`user.dir`代表...

    UNIX回车换行与Windows下的区别

    例如,当在Windows环境下打开一个纯UNIX格式的文本文件时,由于文件中只有换行符(LF),没有回车符(CR),因此Windows系统默认的记事本程序无法识别正确的换行位置,导致所有文本内容被显示在一行内,造成阅读困难...

Global site tag (gtag.js) - Google Analytics