\r,\n,\r\n的前世今生
前情
最近在逛论坛的时候遇到有人在提问题,为什么\n在苹果手机上不换行,我以前有网上看到过文章,是因为各系统的解析不同,需要使用\r\n来做兼容,自己虽然知道怎么解决,但是不知具体原因,今特来详细了解。
它们的来历并引起分歧的原由
“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
\r-软空格
在Linux、unix 中表示返回到当行的最开始位置
在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果
\n-软回车
在Windows 中表示换行且回到下一行的最开始位置。相当于Mac OS 里的 \r 的效果
在Linux、unix 中只表示换行,但不会回到下一行的开始位置
文件中的换行符号
\n LF或ASCII中的0x0A(10);\r CR或ASCII中的0x0D(13)
- linux,unix: \r\n
- windows : \n
- Mac OS : \r
使用注意事项
- 它们在双引号或定界符表示的字符串中有效,在单引号表示的字符串中无效
- \r\n 一般一起用,用来表示键盘上的回车键,也可只用 \n
\r,\n,\r\n的前世今生的更多相关文章
- R(七): R开发实例-map热力图
第四章通过REmap包完成基于map分布图示例,前面提到REmap基于Echart2.0, 一方面在移动终端适应效果差,另一方面REmap提供的热力图仅支持全国及省市大版块map,基于上面的原因,参考 ...
- R(四): R开发实例-map分布图
前几章对R语言的运行原理.基本语法.数据类型.环境部署等基础知识作了简单介绍,本节将结合具体案例进行验证测试. 案例场景:从互联网下载全国三甲医院数据,以地图作为背景,展现各医院在地图上的分布图.全国 ...
- R(一): R基础知识
R 是一门拥有统计分析及作图功能的免费软件,主要用于数学建模.统计计算.数据处理.可视化等方向.据 IEEE Spectrum发布的2016年编程语言前10位排名来看,R语言由2015年排名第6位上升 ...
- T Y P E L I B R A R I E S库加载
#---------------------------------------------------------------------------- # T Y P E L I B R A R ...
- Ubuntu安装R及R包
安装R $sudo apt-get update $sudo apt-get install r-base $sudo apt-get install r-base-dev 安装一些可能的依赖包 $s ...
- 转:\r,\n,\r\n的区别
回车.换行的区别 他们间的区别其实是个回车换行的问题 先来段历史 回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别. 符号 ASCII码 ...
- python文件操作各种模式和常用方法总结r r+ rb r+b
1.读,r r+ rb r+b read() 全部读取 read(n) 读取一部分 r模式下:n 个字符. rb模式下:n个 字节. readline() 按行读取. readlines() 返回个列 ...
- velecity报错:Caused by: org.apache.velocity.exception.ParseErrorException: Lexical error, Encountered: <EOF> after : "\'/order/pay?activity=\" + activityId);\r\n }*/\r\n</script>\r\n#end\r\n" at /a
Caused by: org.apache.velocity.exception.ParseErrorException: Lexical error, Encountered: <EOF> ...
- smtp发送邮件记得结尾发送"\r\n.\r\n"
前段时间老板安排我修复一个邮件服务器后台C程序的bug,这个功能是邮件强制发送功能,从邮件管理后台将垃圾邮件发送出去. 因为服务器是debian系统,所以我用dbg配合日志大致跟踪后,追踪到了读取邮件 ...
- Linux环境下R和R包安装及其管理
前言 R对windows使用很友好,对Linux来说充满了敌意.小数据可以在windows下交互操作,效果很好很棒.可是当我们要处理大数据,或者要在集群上搭建pipeline时,不得不面对在Linux ...
随机推荐
- IOI2000 邮局 加强版 题解
[IOI2000] 邮局 加强版 题解 考虑动态规划,设 \(f_{i,j}\) 为经过了 \(i\) 个村庄,正在建第 \(j\) 个邮局的最优距离. 以及 \(w_{i,j}\) 表示区间 \( ...
- SpringBoot——更换Tomcat服务器为 Jetty 服务器
Jetty服务器(可能会用到) Jetty 比 Tomcat更轻量级,可拓展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty 首先要启动Jetty服务器 --> ...
- Spring —— AOP总结
AOP 总结
- Spring —— 注解开发(依赖注入)
自动装配 引用类型 简单类型 加载properties文件
- AtCoder Regular Contest 182(A B C)
原来第二题比第一题简单吗 A.Chmax Rush! \(\texttt{Diff 1110}\) 给定三个序列 \(S,P,V\),其中 \(S\) 的长度为 \(N\),\(P,V\) 的长度为 ...
- CSP提高组模拟1
我的微軟輸入法莫名其妙變成繁體了,你們有什麽頭緒嗎 狀態 題目 20 Time Exceeded A 最短路 25 Time Exceeded B 方格取数 0 Time Exceeded C 数组 ...
- HEOI2024 题目转存
赛时测试数据下载 wind xor wormhole maze timeline sleep 题解参考 [省选联考 2024] 季风 题目背景 生活在二维平面的小 X 准备拜访小 Y,但由于气候的变化 ...
- 课时04:了解HTTP网络协议
什么是HTTP协议 HTTP(HyperText Transfer Protocol)叫超文本传输协议,它是web服务器和客户端直接进行数据传输的规则,是一个无状态的应用层协议. HTTP协议工作原理 ...
- 21 如何写出一篇高质量的sci水文
博客配套视频链接: https://www.bilibili.com/video/BV1fW4y1W7dS/ b 站直接看 模型确定, 结果正在跑(或已结束), 目标期刊已定,一般可以定顶刊 从目标期 ...
- kotlin协程——>共享的可变状态与并发
共享的可变状态与并发 协程可⽤多线程调度器(⽐如默认的 Dispatchers.Default)并发执⾏.这样就可以提出所有常⻅的并发 问题.主要的问题是同步访问共享的可变状态.协程领域对这个问题的⼀ ...