文档章节

回车和换行

laichendong
 laichendong
发布于 2014/06/25 09:27
字数 996
阅读 21
收藏 0
点赞 0
评论 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

\r,\n,\r\n的区别

n是换行,英文是New line,表示使光标到行首 r是回车,英文是Carriage return,表示使光标下移一格 rn表示回车换行 我们在平时使用电脑时,已经习惯了回车和换行一次搞定,敲一个回车键,即是...

Airship ⋅ 2015/07/22 ⋅ 1

回车符和换行符

首先转一段关于回车和换行的历史。 回车和换行关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。 在计算机还没有出现之前,有一种叫做电传打字机(Teletype ...

gundamfj ⋅ 2011/07/26 ⋅ 0

终于搞懂了回车与换行的区别

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

苍狼牧 ⋅ 2017/02/22 ⋅ 0

php中\r \r\n \t的区别

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

Junn ⋅ 2012/10/16 ⋅ 0

java 正则表达式

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

风之恋--- ⋅ 2014/07/17 ⋅ 2

\r \n有什么区别

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

彭苏云 ⋅ 2014/07/30 ⋅ 0

windows、unix/linux、mac回车换行问题

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

Sandy_wu ⋅ 2013/05/02 ⋅ 0

properties 文件 属性值过长换行如何处理

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

dml124 ⋅ 2013/09/10 ⋅ 1

计算机系统的回车与换行符号

不同的计算机操作系统对一个文档如何结束一行及如何开始新的一行有不同的解决方式,而这些方式的由来,甚至早于计算机的出现。下面列出主要操作系统对‘回车、换行’的定义: 系统 描述 ASCI...

Macnode ⋅ 2012/04/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud构建微服务架构服务注册与发现

Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、...

明理萝 ⋅ 28分钟前 ⋅ 0

占位slot

一、为什么我们需要slot 假如我们有个需要,子组件中需要显示一段html内容,显示什么不是由子组件决定,而是由父组件传递什么决定,我们该怎么做 很挫的做法,我们使用组件间的数据传递 父组...

金于虎 ⋅ 28分钟前 ⋅ 0

Linux集群 NTP 时间同步

基于CentOS 7 规划 比如有2台机器 IP 主机名 说明 192.168.103.51 cdh51 本地NTP服务端 192.168.103.52 cdh52 本地NTP客户端 安装NTP服务 每台机器都安装ntp yum -y install ntp NTP服务端(...

囚兔 ⋅ 30分钟前 ⋅ 0

国际版链克口袋 获取方法

1 月16日,网心科技玩客云团队在官网发布了停止链克口袋转帐服务的通知。通知中表示迅雷将于1月25日在AppStore和官网,正式发布链克口袋新版本,新版本不支持迅雷及迅雷合作伙伴开发的应用场...

xiaogg ⋅ 31分钟前 ⋅ 0

Raft中Batching和pipelining到底是什么?

Raft supports batching and pipelining of log entries, and both are important for best performance. Many of the costs of request processing are amortized when multiple requests a......

黑客画家 ⋅ 32分钟前 ⋅ 0

Mybatis-Plus 之BaseMapper 方法详解

/** * Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能 * 这个 Mapper 支持 id 泛型 * @author hubin * @Date 2016-01-23 */public interface BaseMapper<T> ...

干干 ⋅ 32分钟前 ⋅ 0

JVM笔记9-Class类文件结构

摘要: 1.Class类文件结构   Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件之中,中间没有添加任何分隔符,这使得整个 Class 文件中...

传授知识的天使 ⋅ 36分钟前 ⋅ 0

MySQL数据库之sleep线程过长如何处理?

  什么是sleep线程?   sleep线程长时间保持可客户端与服务端的连接状态   导致sleep过多的原因:   使用太多持久连接(高并发系统中 不适合使用持久连接)   程序中 没有及时关闭MyS...

老男孩Linux培训 ⋅ 37分钟前 ⋅ 0

转发和重定向的区别

转发在服务器端完成的;重定向是在客户端完成的 转发的速度快;重定向速度慢 转发的是同一次请求;重定向是两次不同请求 转发不会执行转发后的代码;重定向会执行重定向之后的代码 转发地址栏...

冯莉莉莉莉 ⋅ 38分钟前 ⋅ 0

go语言实现http proxy的关键一步

go语言自带包ReverseProxy 实现了proxy的功能。 但我希望proxy进程能够在代理的同时,完整的把请求和请求体记录在日志里。 仅使用ReverseProxy 包的话,uri记录没问题,但body只能被读取一次...

xuanzilie ⋅ 43分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部