不同系统下的回车\r和换行\n,及其历史
我们平时按下键盘上的‘回车键’,就能实现回车换行【我们在屏幕上所看到的就是光标移到了下一行的开头位置!!ps:不讨论软件实现的特殊功能,如word里的回车智能缩进】。因此对这个按键更准确说应该叫做‘回车换行键’
就且将这种将光标移到下行开头的功能称作回车换行吧【注意这和下面将谈到的“回车字符”、“换行字符”的区别】!!不同系统对这种功能的实现采用了不同的方式。如Windows用两个控制字符\r\n实现,而Linux/Unix将其设计为\n,Mac也已改为\n。(网上好多文章仍写着MAC是\r!!)
| Windows | \r\n | 0D0A |
| Linux/Unix | \n | 0A |
| Mac | 旧为\r,现已改为\n | 已改为:0A |
//\r是Mac OS 9版本及其之前的回车换行,其后版本为MAC OS X(基于Unix基础了),回车换行已改为\n
//MAC OS最后一个版本是2001年末发布的9.2.2版本!2001年3月发布MAC OS X10.0(猎豹)初始版本,其后苹果OS X版本多以猫科动物命名。更多内容请参见维基百科。
\r和\n在ASCii码下具体为:
| 控制字符 | 16进制 | 10进制 | Seq | 缩写 | 含义 |
| \n | 0A | 10 | ^J | LF | LineFeed(换行,Newline) |
| \r | 0D | 13 | ^M | CR | Carriage Return(回车) |
对比下: Ascii下,10进制:A是65(41H),a是97(61H),0是48(30H)
关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。
1.电传打字机(Teletype Model 33)【读者可到国外网站如Youtube搜一下相关视频,了解一下它的工作原理。】我截了几张图:

(下面是我自己描述的,很不专业!!若想有更深刻的了解,最好看下视频,,能摸到这种老古董更好:) )
方框3:其中,左边的那个是换行按键【即使卷筒上的纸上移一定距离】。。右边的是回车按键【即打字机械移回到最左边】
箭头1:是附着在卷筒上的纸。按下换行键(方框3中左边的那个按键)后,纸就会随着卷筒的滚动往上移动一定距离(行间距吗!?)。。。
箭头2:很机械化的装置啊,我就叫它打字头吧。可以观察到:每按下一个按键(不是指全部,个别按键有特殊功能),打字头会往纸上打字【原理?不深究了】,然后会往右移动一下【很容易想到,空格按键和缩进按键不往纸上打字,只移动打字头,且后者的移动距离更大】。。。什么时候想把这该打字头移到最左边,就按一下回车键(方框3中右边的那个按键)。【当然,因为我们目的是要往纸上打字,因此还需要再按下左边的换行键。不然的话打字头还处在原来的那行,那行字也会被覆盖掉。。因此,回车键和换行键肯定是要一起用的】。。。而且,当打字头移到了纸的最右边而必须要换行时,这个打字机是会自动发出铃声提醒的(详情去Youtube看视频)
箭头4:纸带。。。。那几排按键(这就是键盘的起源吗!?):每个按键都有与之对应的针孔。启动打印 针孔带 的功能后(看图,箭头4下面有4个拨动开关),每次按下的键(什么a呀,b呀,空格呀,缩进呀,回车呀...),其对应的针孔排列就打到纸带上。呶,就从箭头5处流出来了。样子参见旁边的图

箭头6:就是它实现了电传打字机的自动打字功能,把得到的针孔纸带扣到这个箭头6所在的装置上(就是图中5、6箭头之间的那块灰色方方的地方),然后拨动箭头6指向的开关,这样,整个打字机就会自动打字了。。。并不是说该打字机打字必须要针孔纸带,前面说了,那几排按钮本身就能往纸上手动打字,同时可选择是否往纸带上打针孔以便以后重复使用。
总结:当我们得到已经制作好的针孔纸带时,把它扣到箭头6所在的装置上,打开开关,就能实现自动化打字了:打一个字母,打字头移一位,当要移到纸下一行开头打字时(何时取决于按下的回车和换行键),打字头先移到最左边,然后纸卷筒上移一下,,然后继续打字。。。。。自己需要制作针孔纸带或想手动打字时,可靠那几排按钮操作。。。(主要注意的就是回车换行:先按下回车按键,再按下换行按键...嗯,两者可以换个顺序吗?)。。
2.(选自网上)在计算机还没有出现之前,这种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行进行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这两个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个字符叫做“回车”,告诉打字机把打字头定位在左边界;另一个字符叫做“换行”,告诉打字机把纸向上移一行。【可见,上面几张图所述的这种打字机,其已经是解决好了的:即回车、换行也有了对应的针孔(代表相应的字符,控制字符)】
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
实验证明:
1.我在Windows下用EditPlus编辑器输入如下内容: 然后用16进制形式查看:

从图中的0D和0A可以知道按下的回车换行键会插入不可见的两个字符\r \n(不可见,但上述编辑器用小数点取代了其位置)
2.经我在VMWare下的ubuntu12.04系统(linux系统)实验发现(下图),ubuntu默认的确是\n.......但是\r\n \r这2者在其默认文本编辑器gedit下仍能正常换行的!

而在Windows下用相应hex编辑器为文本添加\r或\n字符后,用Windows自带的记事本中打开:两种字符无任何显示作用。而在Editplus文本编辑器下显示为一小段空白!!
3.MAC OS X 10.7
用UltraEdit for Mac编辑器,输入字母与回车,用十六进制查看:

可看到回车的确是\n
总结:虽然不同的回车换行控制符在不同的系统、不同的软件下显示可能正常、可能不正常。。。但至少证明了这个事实:3类系统的确采用了相应的控制字符或字符组合来实现的回车换行。
不同系统下的回车\r和换行\n,及其历史的更多相关文章
- 回车\r与换行\n
在计算机出现之前,有一种电传机械打字机,每秒可以打10个字符.但是有一个问题,就是打满一行后,需要进行换行,换行是需要0.2秒.如果这时有字符传入,就会丢失两个字符.为了解决这个问题,便定义了两个字符 ...
- 【零碎小bug系列】windows下的回车和换行符,cmd(telnet)上输出不左对齐
cmd(telnet)上输出不左对齐,而是有莫名其妙的空格 目录 cmd(telnet)上输出不左对齐,而是有莫名其妙的空格 背景 解决 细究 背景 在cmd上使用telnet连接本地端口的服务器时, ...
- 如何用python在Windows系统下,生成UNIX格式文件
平时测试工作中,少不了制造测试数据.最近一个项目,我就需要制造一批可在UNIX下正确读取的文件.为确保这批文件能从FTP下载成功,开发叮嘱我:“文件中凡是遇到换行,换行符必须是UNIX下的LF,而不是 ...
- <pre>标签:\r\n换行符的保留
mysql数据读库的\r\n换行符处理 这个问题是我在采集数据时发现的,采集网页的数据,大概有6千多条,采集的内容保留了最原始的\r\n和\n换行字符,但在mysql管理工具中(phpmyadmin和 ...
- 换行符 \r \n \r\n 在不同系统下的区别
'\r'是回车,前者使光标到行首,(carriage return)'\n'是换行,后者使光标下移一格,(line feed)\r 是回车,return\n 是换行,newline对于换行这个动作,u ...
- 转:LINUX/UNIX下的回车换行与WINDOWS下的区别
今天,我总算搞清楚“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别了.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 3 ...
- Windows、Unix、Mac不同操作系统的换行问题-剖析回车符\r和换行符\n
转载链接:http://blog.csdn.net/tskyfree/article/details/8121951 一.概念: 换行符‘\n’和回车符‘\r’ (1)换行符就是另起一行 --- ' ...
- 网上找的一篇博文,原文搞错了,应该是\r\n,本文已改正!——回车CR和换行line feed
"回车"(carriage return)和"换行"(line feed)与 ASCII表 关于“回车”(carriage return)和“换行”(line ...
- '\r'(回车符),'\n'(换行符)与"\r\n"
一.'\n','\r'和"\r\n" 回车\r本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return(回车,carriage有&q ...
随机推荐
- 2016HUAS暑假集训题1 J - 迷宫问题
Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...
- BizTalk开发系列(二十) 类型作用域
Orchestration中的Type概念跟.NET 里的Class一样,可以在Orchestration开过过程中将多个实例绑定到一种类型.Orchestration 视图里包括的类型有Port T ...
- poj1061-青蛙的约会(扩展欧几里德算法)
一,题意: 两个青蛙在赤道上跳跃,走环路.起始位置分别为x,y. 每次跳跃距离分别为m,n.赤道长度为L.两青蛙跳跃方向与次数相同的情况下, 问两青蛙是否有方法跳跃到同一点.输出最少跳跃次数.二,思路 ...
- Thinking in Java——笔记(6)
Access Control A piece of work isn't good until it's been rewritten, often many times. Thus a primar ...
- Mongo聚合函数
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d1"), "a" : "张三", ...
- 基于netty的心跳机制实现
前言:在实现过程查找过许多资料,各种波折,最后综合多篇文章最终实现并上线使用.为了减少大家踩坑的时间,所以写了本文,希望有用.对于实现过程中有用的参考资料直接放上链接,可能有些内容相对冗余,不过时间允 ...
- k8s入门系列之扩展组件(一)DNS安装篇
DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...
- Linux环境下apache性能测试工具ab使用详解
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_lo ...
- Python Decorator 和函数式编程
看到一篇翻译不错的文章,原文链接: Python Decorator 和函数式编程
- oracle数据库安装
1.oracle10g下载完成后,选择“setup.exe”启动安装. 2.oracle主目录位置就是oracle准备安装的位置,称为"Oracle_Home".Oracle安装的 ...