[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

时间:2023-01-07 18:56:46

换行回车

回忆上次内容

  • 区分概念
  • ​terminal​​终端
  • 主机网络中
  • 最终的 端点
  • ​TeleTYpewriter​
  • 电传打印机
  • 终端硬件
  • ​shell​
  • 终端硬件基础上的
  • 软件壳子
  • ​Console​​ 控制台
  • 主机旁边 的 控制面板
  • 存储文件 的 时候
  • 我 在文件里 打了回车​​\n​
  • 系统 将​​0x0a​​存入字节 进文件
  • 换行 ​​自动​​就有 回车功能 了吗?????
  • 回忆一下
  • 被忽略的 ​​\r​

\r

  • ​\r​​ 也是一个 ascii字符
  • ​\​​是
  • 转义字符
  • ​\r​​是
  • 转义序列
  • 什么是 转义 呢?
  • 转义转义 转化含义
  • 把原来 两个字符 : ​​\​​和​​r​
  • 转化为 ​​\r​​ 这样一个字符
  • 没错!
  • ​\r​​ 是 ​​1​​个​​ascii​​字符

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 那么 ​​\r​​ 这一个字符
  • 对应字节 是​​多少​​ 呢?

字节状态

  • ​\r​​ 对应的字节是
  • ​0x0d​

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 这个​​0x0d​
  • 好像 在安徒生童话中 出现过

安徒生童话

  • 在 ​​文本​​观看 模式下
  • 自动 回车换行

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 在 ​​字节​​观看 模式下
  • ​0a​
  • ​0a​​前面是​​0d​
  • 先​​0a​​换行
  • (line-feed)
  • 再​​0d​​回车
  • (carriage-return)

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 貌似
  • 总是 成对出现的
  • 为什么 呢?

换行 和 回车

  • ​换行​
  • 对应 字节​​0x0a​
  • Line-Feed
  • 水平 不动
  • 垂直 向上喂纸
  • 所以是 ​​feed​

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • ​回车​
  • 对应 字节​​0x0d​
  • Carriage-Return
  • 垂直 不动
  • 水平 ​​回​​到纸张左侧
  • 可移动的打印头
  • 运输字符 的 装置 (Carriage)
  • 回到行首
  • 所以是 ​​Return​
  • 这是 ​​两​​个控制信号
  • 不过他俩 经常 联合使用

联合使用

  • 当​​CR​​和​​LF​​ 联合使用时
  • 会将 打印纸张 上移一行
  • 打字位置 将​​回​​到 新行的最左侧
  • 也就是
  • 今天所理解 的 回车换行

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 电传打字机
  • 渐渐 退出了历史舞台
  • 当初的纸张 变成了 今天的显示器
  • 打字机的按键 也演变为 如今的键盘
  • 甚至 有了 操作系统
  • 操作系统 是 如何理解 回车换行 的呢?

操作系统 ​​Unix​

  • 受限于
  • 内存和软盘空间 的 不足
  • 设计者 决定采用
  • ​单​​个字符 来表示 换行回车
  • 使用 ​​\n​​ 替代 ​​\r\n​
  • 默认 ​​\n​​ = ​​\r\n​
  • ​一​​个字符干​​两​​个事

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 类unix(unix-like) 都是如此
  • 包括 BSD、Linux

unix 和 c 的羁绊

  • C语言
  • 延续了 这个惯例
  • ​\n​
  • 既干 ​​\n​​的活(换行)
  • 又干 ​​\r​​的活(回车)
  • 输出中有 \n 的话

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 如果只有​​\n​
  • 本应是
  • 下图这样的

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 实际上是
  • 下图这样的

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 是 回车加换行 的
  • 那还有
  • 纯换行 不回车的效果 吗?

纯换行

  • 纯换行效果可以用​​\v​

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • ​\v​​ 在ascii中的含义是VT
  • 垂直制表位

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 序号是 11

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

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

  • 跨系统 浏览文档的时候
  • 会有时候 多行 变成 一行
  • 有的会出现 ​​'0D'​​,​​ '^M'​​ 之类的乱码
  • 不只是 windows记事本????️
  • 而且 微软office 等
  • 都曾有 这个困扰
  • win10 最新的记事本????️
  • 已经 优化

python 解释器的理解

  • 标准 输入输出流
  • python 的 字符输入
  • 靠的是 终端键盘
  • python 的 显示输出
  • 靠的是 终端屏幕
  • 具体字符
  • 显示​​\n​​的时候
  • 就会换行
  • LineFeed
  • 显示​​\r​​的时候
  • 就会退回到本行开头
  • CarriageReturn

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

  • 将​​\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上 是统一 的
  • 光说不练假把式
  • 我能看看电传打字机吗?????