文档章节

回车和换行

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的时候,如何处理换行符。

© 著作权归作者所有

共有 人打赏支持
laichendong
粉丝 8
博文 85
码字总数 71483
作品 0
朝阳
程序员
【详解】回车 换行 0x0D 0x0A CR LF \r \n的来龙去脉

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

阿信sxq
2014/02/12
0
0
终于搞懂了回车与换行的区别

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

苍狼牧
2017/02/22
0
0
php中\r \r\n \t的区别

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

Junn
2012/10/16
0
0
java 正则表达式

实现这样一个正则表达式: 取换行间的内容(r,n或者rn),但不包括这些回车换行, 回车换行间的空白字符(空格回车)不需要 换个说法就是:只取换行间(r,n或者rn)的非空白字符,每组内容(...

风之恋---
2014/07/17
191
2
windows、unix/linux、mac回车换行问题

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

Sandy_wu
2013/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

golang使用protobuf简易教程

参考文档:https://blog.csdn.net/qq_15437667/article/details/78425151 一、安装protobuf # 去github.com/golang/protobuf下载源码包,# 拷贝到 $GOPATH/src/github.com/golang/protobuf......

科陆李明
29分钟前
0
0
8月16日 上课截图

小丑鱼00
44分钟前
0
0
Nginx负载均衡、配置SSL

Nginx负载均衡 在 /usr/local/nginx/conf/vhost/ 下创建一个文件,写入以下内容 加载后用curl测试可以访问设置的网站 www.qq.com ssl原理 HTTPS是一种加密的http协议,如果HTTP通信的数据包在...

黄昏残影
48分钟前
0
0
String 源码阅读笔记

String源码阅读 本人学习笔记,内容来自于阅读源码和其他博客,水平有限,如有错误,烦请指正。 详情参考: Java 7 源码学习系列(一)——String 请别再拿“String s = new String("xyz");...

等到烟火清凉_
49分钟前
4
0
Coding and Paper Letter(十二)

资源整理。<!-- more --> 1 Coding: 1.R语言生成的ppt,GeoStat2018会议报告,时空模式分析的报告。 geostat18 2.欧空局哨兵和SMOS的工具集,关于对地观测数据的处理与分析的docker容器。 ...

胖胖雕
50分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部