不同系统下的回车\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 ...
随机推荐
- js在输出时乱码
如果网页头是<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ...
- C# 截取字符串
1.根据单个分隔字符用split截取 例如 string st="GT123_1"; string[] sArray=st.split("_"); 即可得到sA ...
- Mariadb 10.1 joiner节点加入报错WSREP: Failed to prepare for incremental state transfer
Mariadb 10.1 galera cluster 集群joiner 节点加入集群 会出现这种报错,导致mysql一直点点点,这里我贴出报错.2016年04月19日13:34:58 2016-04 ...
- maven工程打包出现Test相关的错误
----------------------------------------------------- T E S T S ------------------------------------ ...
- 深入分析 Java 中的中文编码问题
登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Del ...
- Empire C:Basic 4
一.变量名 1.名字由字母和数字组成,但其第一个字符必须为字母. 2.变量名不要以下划线开头. 3.变量名使用小写字母,符号常量名全部使用大写字母. 二.数据类型及长度 1.char 字符型 占用一个 ...
- ArcMap中,如何查看当前工具是否在执行?如何将工具调到前台来执行?
ArcMap中,如何查看当前工具是否在执行?如何将工具调到前台来执行? 描述 如何查看当前工具是否在执行?如何将工具调到前台来执行? 解决办法 后台GP执行中,可以在 Geoprocessing菜单中 ...
- 关于Action快捷键和小键盘的问题
在使用全尺寸键盘的时候 键盘右边都有一排小键盘 但是这个小键盘的数字键值和普通键盘的数字键值是不一样的 在ANSI码里 标准数字键值是$30..$39, 而小键盘的键值是$60..$69 这样问题就来 ...
- 控制Wordpress对搜索引擎的可见性
网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,这些通过robots.txt体现. wordpress本身没有robots.txt,但是用根目录访问/robots.txt,如果 ...
- 如何真正抓住微信小程序的红利? 阿禅知乎live总结
微信App定义 为满足用户某种开发需求.完全基于微信的消息或网页应用,入口是公众号,用户无需离开微信即可完成所有操作,所有需求都在公众号里被满足 微信App的优势 1. 顾客在哪里,就让顾客在哪里看到 ...