文档章节

回车和换行

laichendong
 laichendong
发布于 2014/06/25 09:27
字数 996
阅读 21
收藏 0
线上遇到一个问题:一个页面的所有js都失效了!通过浏览器控制台也没发现js报错。用Charles把页面响应保存下来。一段代码一段代码删除做减法。发现是类似下面的一段:
var temptitle = "纳雪莱 蔑藤竹炭竹垫 汽车坐垫四季垫 夏季通用 汽车用品
 A6410";
字符串有内有换行,可是光有换行应该也没问题啊,于是在notepad++中显示了所有字符,问题浮出水面!“汽车用品”后面的是LF,而不是CRLF! 20130419140345 这个bug是如何引入和如何修复的不是这篇文章我要说的重点(temptitle这条语句是后台拼出来的,字符串内容是用户从textarea输入的,程序没有对输入做足够的校验处理,所以出现了这个意外。),我在这想说说的是这个CR和LF(回车和换行)。

一、历史

这两个字符的历史可以追溯到计算器出现之前,有一种叫 电传打字机的东西,他可以理解为高级的电报,可以接受电信号,转换成字符打印到纸上。设计的时候遇到一个问题,当打印完一行,机械的打印头是在行尾的。要打印下一行,就必须将打印头从行尾移到行头(回车),并向下移一行(换行)。 唐纳德·穆雷想出的解决方法是传输两个控制字符(CR = Carriage Return  和 LF = Line Feed)来告诉打字机执行这两个动作。这个设计被保留到了计算机的时代。

二、各操作系统间的差异

在那个存储器还非常昂贵的是年代。一些科学家认为,每行结尾都用两个字符来表示是一件非常奢侈的事情。应该用一个字符就够了。于是分歧出现了。unix采用了\n这个字符,mac采用\r,而windows依然使用\r\n。
操作系统 采用的字符
操作系统 缩写 英文 转义字符 ASCII 码 16进制
Windows CRLF Carriage Return Line Feed \r\n 13 10 0x0D 0x0A
Unix/Linux LF Line Feed \n 10 0x0A
Mac OS CR Carriage Return \r 13 0x0D

三、在不同的操作系统间打开文件

从上面的表我们可以看到,不同的操作系统使用的“行分隔符”不一样,所以同一个文件(比如源代码文件),在不同的操作系统下使用文本编辑器打开,换行的表现不一定正确。为了保证一份文件在不同的操作系统间打开,看起来来都是一样的。我们有时需要对文件的换行符进行处理。 在windows下,我一般使用notepad++,他可以正确的将\n显示成换行(看上面截图)。也可以对文件进行转换:编辑->档案格式转换->你想要的格式。在新建文件的时候,也允许你选择格式: 20130421161140 在linux下,可以采用工具 dos2unix和unix2dos来进行互相转换。当然也可使用sed自己做替换。 作为屌丝的我,居然没怎么用过macOS,就不在个瞎说了。各位用过的请脑补。不过貌似上面提到的dos2nuix就可以了。

四、对码农的影响

我们的源代码通常都是会在好几个操作系统间来回流转的,比如我们的源码服务器是windows,开发机器是linux或者反过来。所以这里也涉及到这个问题,只不过大多数情况下我们的版本管理工具(svn或git等等)已经默默的帮你把事情都搞定了。所以你浑然不觉而已。其实在安装windows下的git客户端时,是有一个提示的: 20130421163011 在这里你可以选择git在checkout和commit的时候,如何处理换行符。

© 著作权归作者所有

共有 人打赏支持
上一篇: 说说效率
下一篇: 显示12个字节
laichendong
粉丝 10
博文 85
码字总数 71483
作品 0
朝阳
程序员
私信 提问
【详解】回车 换行 0x0D 0x0A CR LF \r \n的来龙去脉

1、【回车和换行的历史】 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行,需要回车换行,此过程,要用...

阿信sxq
2014/02/12
0
0
php中\r \r\n \t的区别

r 回车: 在Linux、unix 中表示返回到当行的最开始位置。 在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 n 的效果。 n 换行: 在Windows 中表示换行且回到下一行的最开...

Junn
2012/10/16
0
0
windows、unix/linux、mac回车换行问题

'r'是回车,'n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。下面转一篇文章。 回车和换行 今天,我总算搞清楚“回车”(carriage return)和“换行”(line ...

Sandy_wu
2013/05/02
0
0
properties 文件 属性值过长换行如何处理

Java读取Properties文件时碰到两问题: 1. 资源文件中的key对应的value过长时,书写不方便,需要换行,若直接回车则回车后的内容被忽略 2. 资源文件中的key对应的value需要换行显示时,若直接...

dml124
2013/09/10
0
1
终于搞懂了回车与换行的区别

关于换行和回车其实平时我们不太在意,所以关于两者的区别也不太清楚,在平时开发时可能会遇到一些文件处理的问题,放到不同的操作系统上出现各种坑。那么回车和换行到底有哪些区别呢?今天咱...

苍狼牧
2017/02/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

slot分发内容

slot元素作为组件模板之中的内容分发插槽。这个元素自身将被替换。 有 name 特性的 slot 称为具名 slot。 有 slot 特性的内容将分发到名字相匹配的具名 slot。 内容分发就是指混合父组件的内...

Carbenson
9分钟前
1
0
python开发入门

1.执行python文件 # python ./demo.py 2.Python ImportError: No module named 'requests'异常 解决方法: # pip install requests;...

硅谷课堂
10分钟前
1
0
官宣,PyTorch 1.0 稳定版本现已推出

简评:快来一起快乐地学习吧。 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版。研究人员和工程师现...

极光推送
24分钟前
1
0
对比理解adr,ldr指令

很多人在写简单的裸机代码或分析uboot时,常常遇到adr ldr指令。却分不清这2者的区别,今天就来谈谈adr与ldr指令。 参照韦老师的代码和Makefile写了test_adr.S: .text .globl _start _start...

天王盖地虎626
34分钟前
2
0
将spring boot 项目注册为Linux的服务

springboot 注册为Linux系统服务 springboot 注册为Linux系统服务

miaojiangmin
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部