换行回车
回忆上次内容
- 区分概念
 
terminal终端
- 主机网络中
 
- 最终的 端点
 
TeleTYpewriter
- 电传打印机
 - 终端硬件
 
shell
- 终端硬件基础上的
 
- 软件壳子
 
Console 控制台
- 主机旁边 的 控制面板
 
- 存储文件 的 时候
 
- 我 在文件里 打了回车
\n - 系统 将
0x0a存入字节 进文件 - 换行 
自动就有 回车功能 了吗?🤔 
- 回忆一下
 
- 被忽略的 
\r 
\r
\r 也是一个 ascii字符
\是
- 转义字符
 
\r是
- 转义序列
 
- 什么是 
转义呢? 
- 转义转义 转化含义
 - 把原来 两个字符 : 
\和r - 转化为 
\r 这样一个字符 
- 没错!
 
- 
\r 是 1个ascii字符 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix](https://file.cfanz.cn/uploads/png/2023/01/07/10/Hb09WY1d0a.png)
- 那么 
\r 这一个字符 
- 对应字节 是
多少 呢? 
字节状态
\r 对应的字节是
- 
0x0d 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_02](https://file.cfanz.cn/uploads/png/2023/01/07/10/a867XPb37A.png)
- 这个
0x0d 
- 好像 在安徒生童话中 出现过
 
安徒生童话
- 在 
文本观看 模式下 
- 自动 回车换行
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_03](https://file.cfanz.cn/uploads/png/2022/11/25/10/A75PVUP706.png)
- 在 
字节观看 模式下 
- 
0a 
0a前面是0d
- 先
0a换行 
- (line-feed)
 
- 再
0d回车 
- (carriage-return)
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python_04](https://file.cfanz.cn/uploads/png/2022/11/25/10/3R85dR9LO9.png)
- 貌似
 
- 总是 成对出现的
 - 为什么 呢?
 
换行 和 回车
换行
- 对应 字节
0x0a - Line-Feed
 
- 水平 不动
 - 垂直 向上喂纸
 
- 所以是 
feed 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python_05](https://file.cfanz.cn/uploads/png/2023/01/07/10/5C8e880d75.png)
回车
- 对应 字节
0x0d - Carriage-Return
 
- 垂直 不动
 - 水平 
回到纸张左侧 
- 可移动的打印头
 
- 运输字符 的 装置 (Carriage)
 - 回到行首
 
- 所以是 
Return 
- 这是 
两个控制信号 
- 不过他俩 经常 联合使用
 
联合使用
- 当
CR和LF 联合使用时 
- 会将 打印纸张 上移一行
 - 打字位置 将
回到 新行的最左侧 
- 也就是
 
- 今天所理解 的 回车换行
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python_06](https://file.cfanz.cn/uploads/png/2023/01/07/10/16G386I515.png)
- 电传打字机
 
- 渐渐 退出了历史舞台
 - 当初的纸张 变成了 今天的显示器
 - 打字机的按键 也演变为 如今的键盘
 
- 甚至 有了 操作系统
 
- 操作系统 是 如何理解 回车换行 的呢?
 
操作系统 Unix
- 受限于
 
- 内存和软盘空间 的 不足
 
- 设计者 决定采用
 
单个字符 来表示 换行回车
- 使用 
\n 替代 \r\n - 默认 
\n = \r\n 
- 
一个字符干两个事 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_07](https://file.cfanz.cn/uploads/png/2023/01/07/10/cLb30cD3T1.png)
- 类unix(unix-like) 都是如此
 
- 包括 BSD、Linux
 
unix 和 c 的羁绊
- C语言
 
- 延续了 这个惯例
 \n
- 既干 
\n的活(换行) - 又干 
\r的活(回车) 
- 输出中有 
\n的话 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python_08](https://file.cfanz.cn/uploads/png/2023/01/07/10/Yd21fY3323.png)
- 如果只有
\n 
- 本应是
 
- 下图这样的
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_09](https://file.cfanz.cn/uploads/png/2023/01/07/10/2dCJ558Z86.png)
- 实际上是
 
- 下图这样的
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix_10](https://file.cfanz.cn/uploads/png/2023/01/07/10/82Ge79DcUd.png)
- 是 回车加换行 的
 - 那还有
 
- 纯换行 不回车的效果 吗?
 
纯换行
- 纯换行效果可以用
\v 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python_11](https://file.cfanz.cn/uploads/png/2023/01/07/10/08XPc90d74.png)
\v 在ascii中的含义是VT
- 垂直制表位
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_12](https://file.cfanz.cn/uploads/png/2023/01/07/10/E5Q52eF35K.png)
- 序号是 11
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix_13](https://file.cfanz.cn/uploads/png/2023/01/07/10/d0WZI7553f.png)
Commodore64 和 mac
- Commondore64
 
- 一度 也曾 很流行
 - 同样出于 节省空间的目的
 
- 使用 
\r 代替 \r\n - 这 就有
分歧 了 
- Commodore64 影响了 mac
 
- mac
 
- 早期 也是
 
- 使用 
\r 代替 \r\n - 甚至按键 都叫做 <kbd>return</kbd>
 
- 后来 为了 和
unix保持一致 
- 从 
\r 修改为 \n 
- 可能是因为
Mac用户 
- 需要用 
ssh 命令 
- 连接 
unix-like的服务器 - 换行不统一
 - 文件读取会出现错误
 
- 流行的三大系统(类unix、mac、win)
 
- 两个都是
\n 
- 来来看看 微软的windows
 
微软
- DOS系统 是兼容 CP/M 形成的
 
- 
CP/M 使用 \r\n 
- 键盘上 印的名称是
enter 
- 符号是<kbd>↵</kbd>
 
- 先 LineFeed 再 Return
 - 也是
\r\n 
- 对应字节是b"\x0d\x0a"
 
- 后来 的 
windows 
- 顺着 
DOS的惯例 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_14](https://file.cfanz.cn/uploads/png/2023/01/07/10/57A1485SK4.png)
- 跨系统 浏览文档的时候
 
- 会有时候 多行 变成 一行
 - 有的会出现 
'0D', '^M' 之类的乱码 
- 不只是 windows记事本🗒️
 
- 而且 微软office 等
 - 都曾有 这个困扰
 
- win10 最新的记事本🗒️
 
- 已经 优化
 
python 解释器的理解
- 标准 输入输出流
 
- python 的 字符输入
 
- 靠的是 终端键盘
 
- python 的 显示输出
 
- 靠的是 终端屏幕
 
- 具体字符
 
- 显示
\n的时候 
- 就会换行
 - LineFeed
 
- 显示
\r的时候 
- 就会退回到本行开头
 - CarriageReturn
 
![图片描述 [oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix_15](https://file.cfanz.cn/uploads/png/2023/01/07/10/6HaUWe7cN8.png)
- 将
\n 写入文件的时候 
- 就会以 
b"\x0a"的字节形式 
- 存储 在 文件 中
 
- 将
\r 写入文件的时候 
- 就会以 
b"\x0d"的字节形式 
- 存储 在 文件 中
 
- python3解释器 基于  
操作系统 
- 
操作系统 基于 cpu架构 
- 不管什么样的
操作系统、cpu 架构 
- 只要是 python解释器
 - 对于
\n、\r的解释方式 就是统一的 
- 
\n 换行 - 
\r 退到行头 
- 这种统一 是跨平台的
 
- 跨系统、跨cpu架构的
 
总结
- 对于换行和回车
 - 不同层面的理解
 
- 电传打字机
 
- 两件事
 - 经常 一起干
 - 但也可以 分别干
 
- 不同操作系统
 
- unix-like
 
- 带头简化 成 
\n - 步调一致 就好
 
- mac
 
- 为了 避免麻烦
 - 我和 unix-like一致
 
- windows
 
- 原来 我用户多
 - 定什么规矩 我说了算
 - 惹了 很多问题
 - 现在 我还是 随大流 吧
 
- python 解释器
 
- 
unix-like 做得对 - 不管 在什么系统、什么架构 上
 - 在我python上 是统一 的
 
- 光说不练假把式
 
- 我能看看电传打字机吗?🤔
 
- 我们下次再看!👋蓝桥->https://www.lanqiao.cn/courses/3584
 - github->https://github.com/overmind1980/oeasy-python-tutorial
 - gitee->https://gitee.com/overmind1980/oeasypython
 - 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy
 










