Unix/Linux和Windows回车换行

Linux/Unix下的回车符与windows下的不同,Linux/unix下的回车符是'0d',而在windows下则是'0d0a',

据说这和电脑刚开始发展时的电传打印机的速度有关。

在计算机还没有出现之前,有一种叫电传打字机(teletype model 33)的玩意,每秒钟可以打10个字

符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒的时间,正好可以打两个字符。要是在这

0.2秒内有字符传过来,就会丢失。

于是,研究人员想了一个办法,解决这个问题。就是在每行后面加两个表示结束的字符。一个叫做“回

车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

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

后来,计算机发明了,这丙个概念也就被搬到了计算机上。那时,存储器很贵,一些科学家认为在每行

结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“”,即“\n”;windows系统里,每行结尾是“”,

即“\n\r”;mac系统里,每行结尾是“”。一个直接后果是,unix/mac系统下的文件在windows里打

开的话,所有文字会变成一行;而windows里的文件在unix/mac下打开的话,在每行的结尾可能会多出一个

^M 符号。

c语言编程时(windows系统)

\r就是return回到本行行首  这就会把这一行以前的输出 覆盖掉  如下:

int main () {

cout << "hahaha" << "\r" << "xixi";

}

最后只会显示xixi而hahaha被覆盖了。

\n 是回车+换行  把光标先移到行首,然后换行到下一行,也就是下一行的行首位:

init main () {

cout << "hahaha" << "\n" << "xixi";

}

为什么我在vi等编辑器下打开一个文本文件会包含 ^M,如何把它去掉呢?(见结论4,5)

为什么我在windows上用记事本打开unix上的文件,文件都不换行?(见结论1)

原因分析:

要解决这个问题,必先弄清unix与windows文本文件的差异:

1)磁盘中windows文本文件,总是以“回车”+“换行”的形式进行换行的。

2)磁盘中unix格式的文件,总是以“换行符”(即:LF,'n')换行,而非“回车换行符”。

(unix规定;unix文本文件保存到磁盘时,总是自动把“回车换行符”转换成“换行符”保存。)

输出到终端时,由终端自动将“换行符”转换成“回车换行符”输出。

容易看出来,windows格式的文件换行时,总是比unix格式的文件多一个“回车”(‘r’)符,这是从老式

的打字机上面遗传下来的,老式的打字机中的回车是指打印头回到行首,换行是指进纸并开始下一行的打印

--------------------------------------  结论 1   -------------------------------------------

这样在windows的记事本中打开unix格式的文件时,因为文件中没有'r',所以无法正常显示,结果会把所有

的内容显示在同一行中。

--------------------------------------- 结论 2   -------------------------------------------

utraedit等工具会自动检测文件中是否包含‘r’,当检查行缺少‘r’时,一般会提示,是否要进行unix到

windows的格式转换。(相信大家都遇到过这个提示信息吧)。

---------------------------------------- 结论 3   -------------------------------------------

utraedit和vi等工具,在保存文件时会自动依照文件原来格式进行保存。即:

如果打开的是windows格式,它会把文件依然按windows格式保存(不进行自动转换)。

如果打开的是unix格式,它会把文件依然按unix格式保存了(不进行自动转换)。

---------------------------------------- 结论 4   -------------------------------------------

向utraedit打开unix格式文件中,通过粘贴板“粘贴” windows格式的若干片断时(或反之,即向

windows格式文件时,通过粘贴板“粘贴”unix格式的若干片断行时),代码片断中的“回车换行符” “不

会”自动转换成单个“换行”符(反之亦然)。这样,该文件中就会出现“回车符”与“回车换行符”。

---------------------------------------- 结论 5   -------------------------------------------

vi编辑器等即能正确显示“规则”的unix格式文件,也能正确显示“规则”的windows格式文件,但对包含

单独的“回车符”,同时成对的“回车换行符”的不规则文件(产生原因见结论 4)。vi将把回车符以^M的

形式显示。

解决办法:

使用类似问题2提供的解决方法即可解决,不再赘述。将unix转换成windows格式时,使用unix2dos或win2unix -r(-r代表反方向)即可。

则显示:

hahaha

xixi

由于可见,如果Linux下应用程序需要读取windows下的文件,需要特殊的文本转换工具才行。比如

editplus2就是不错的工具。

补充:vi要显示所有字符,使用:set list命令。

python回车和换行的区别_回车与换行的解释~!相关推荐

  1. python回车和换行的区别_回车与换行的区别 - bithup的个人空间 - OSCHINA - 中文开源技术交流社区...

    区别: \r: 全称:carriage return (carriage是"字车"的意思,打印机上的一个部件) 简称:return 缩写:r ASCII码:13 作用:把光标移动到 ...

  2. python回车和换行的区别_回车与换行的区别(转)

    add by zhj: 不同操作系统下换行符不同,如下: \n: UNIX \n\r: window \r: MAC OS 我们经常遇到的一个问题就是,Unix/Mac系统下的文件在Windows里打 ...

  3. java换行转义字符串_回车,换行,转义字符“\r”,“\n”是什么关系?

    1."回车"这个名词的来历. 关于"回车键"的来历,还得从机械英文打字机说起.在机械英文打字机上,有一个部件叫"字车",每打一个字符(原为单 ...

  4. python的re2和re区别_浅谈Python中re.match()和re.search()的使用及区别

    1.re.match()fvk免费资源网 re.match()的概念是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None.fvk免费资源网 包含的参数如下: ...

  5. python flask与django的区别_真正搞明白Python中Django和Flask框架的区别

    Django和Flask的区别 1.形象类比 如果Django类似于精装修的房子,自带豪华家具.非常齐全功能强大的家电,什么都有了,拎包入住即可,十分方便. 而Flask类似于毛坯房,自己想把房子装修 ...

  6. python和log有啥区别_细说 Python logging

    (可在我的博客文章) 最近有个需求是把以前字符串输出的log 改为json 格式,看了别人的例子,还是有些比较茫然,索性就把logging 整个翻了一边,做点小总结. 初看log 在程序中, log ...

  7. python文本文件和二进制文件的区别_以文本格式和二进制格式打开文件,到底有什么区别?...

    以文本格式和二进制格式打开文件,到底有什么区别? 我们知道,open() 函数第二个参数是一个字符串,用于指定文件的打开方式,如果该字符串中出现 b,则表示以二进制格式打开文件:反之,则以普通的文本格 ...

  8. python数组和函数的区别_真假美猴王-Numpy数据与Python数组的区别与联系!

    Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算.Numpy的诞生弥补了下面提到的两项的不足,numpy提供了两种基本的对象:ndarray(N-dimensional a ...

  9. python web和java web区别_成都汇智动力-谈谈个人认为的JavaWeb开发与PythonWeb开发的区别...

    原标题:成都汇智动力-谈谈个人认为的JavaWeb开发与PythonWeb开发的区别 今天这篇文章谈一谈Java Web开发和Python Web开发的区别.在这里我并不是鼓励大家从Java Web转 ...

最新文章

  1. CentOS 修改/etc/resolv.conf 重启network后又恢复到原来的状态
  2. java el jstl_java -EL技术JSTL技术
  3. php单表查询语句,单表查询
  4. C++远航之封装篇——构造函数
  5. Koa v2.x 中文文档 上下文(Context)
  6. 使用Python实现简单的随机数字抽奖
  7. 【番外】 使用@arcgis/cli脚手架进行ArcGIS JS API开发
  8. 11、生成带参数二维码应用场景
  9. PMP-项目风险管理
  10. python的江湖世界
  11. 【欧拉猜想】是否有无穷多个不可约分的正整数解
  12. linux图片编辑工具,如何在Ubuntu 18.04中安装Pinta图像编辑器
  13. discuz配置阿里云企业邮箱smtp方法
  14. hihoCoder#1082 : 然而沼跃鱼早就看穿了一切
  15. python如何查看函数功能_python如何查看类的函数
  16. 动态规划—1.3 九宫格最短路径
  17. Dream to Control Learning Behaviors by Latent Imagination-笔记
  18. 关注中国移动互联网市场:海外移动互联企业图谋中国 喜大市场忧大差异
  19. 酒店预订需求数据分析
  20. 高通骁龙801开发板

热门文章

  1. pc网站qq互联登录授权php版
  2. css 图片自适应_104道 CSS 面试题,助你查漏补缺(下)
  3. 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
  4. 产品设计——无处不入口,无处不按钮
  5. Unity中使用AVproVideo播放全景视频(HTCVIVE)
  6. 在字节跳动AI Lab工作是什么体验?(文末有抽奖)
  7. 地图API学习(1) 引入和初始化
  8. 全新任务悬赏发布系统源码如何使用?
  9. 关于华硕飞行堡垒安装Ubuntu时的 卡死 和 grub引导问题 的解决办法
  10. “逝去的过往,就不要再回头望”--20岁,做个勇敢而快乐的大男孩!