欢迎光临散文网 会员登陆 & 注册

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

2023-01-07 18:25 作者:oeasy  | 我要投稿

换行回车

回忆上次内容

  • 区分概念

    • 主机旁边 的 控制面板

    • 终端硬件基础上的

    • 软件壳子

    • 电传打印机

    • 终端硬件

    • 主机网络中

    • 最终的 端点

    • terminal终端

    • TeleTYpewriter

    • shell

    • Console 控制台

  • 存储文件 的 时候

    • 我 在文件里 打了回车\n

    • 系统 将0x0a存入字节 进文件

    • 换行 自动就有 回车功能 了吗?🤔

  • 回忆一下

    • 被忽略的 \r

\r

  • \r 也是一个 ascii字符

    • 转义序列

    • 转义字符

    • \

    • \r

  • 什么是 转义 呢?

    • 转义转义 转化含义

    • 把原来 两个字符 : \r

    • 转化为 \r 这样一个字符

  • 没错!

    • \r1ascii字符

  • 那么 \r 这一个字符

    • 对应字节 是多少 呢?

字节状态

  • \r 对应的字节是

    • 0x0d

  • 这个0x0d

    • 好像 在安徒生童话中 出现过

安徒生童话

  • 文本观看 模式下

    • 自动 回车换行

  • 字节观看 模式下

    • 0a

  • 0a前面是0d

    • (carriage-return)

    • (line-feed)

    • 0a换行

    • 0d回车

  • 貌似

    • 总是 成对出现的

    • 为什么 呢?

换行 和 回车

  • 换行

    • 水平 不动

    • 垂直 向上喂纸

    • 对应 字节0x0a

    • Line-Feed

    • 所以是 feed

  • 回车

    • 运输字符 的 装置 (Carriage)

    • 回到行首

    • 垂直 不动

    • 水平 到纸张左侧

    • 对应 字节0x0d

    • Carriage-Return

    • 可移动的打印头

    • 所以是 Return

  • 这是 个控制信号

    • 不过他俩 经常 联合使用

联合使用

  • CRLF 联合使用时

    • 会将 打印纸张 上移一行

    • 打字位置 将到 新行的最左侧

  • 也就是

    • 今天所理解 的 回车换行

  • 电传打字机

    • 渐渐 退出了历史舞台

    • 当初的纸张 变成了 今天的显示器

    • 打字机的按键 也演变为 如今的键盘

  • 甚至 有了 操作系统

    • 操作系统 是 如何理解 回车换行 的呢?

操作系统 Unix

  • 受限于

    • 内存和软盘空间 的 不足

  • 设计者 决定采用

    • 使用 \n 替代 \r\n

    • 默认 \n = \r\n

    • 个字符 来表示 换行回车

    • 个字符干个事

  • 类unix(unix-like) 都是如此

    • 包括 BSD、Linux

unix 和 c 的羁绊

  • C语言

    • 既干 \n的活(换行)

    • 又干 \r的活(回车)

    • 延续了 这个惯例

    • \n

  • 输出中有 \n 的话

  • 如果只有\n

    • 下图这样的

    • 本应是

  • 实际上是

    • 下图这样的

  • 是 回车加换行 的

  • 那还有

    • 纯换行 不回车的效果 吗?

纯换行

  • 纯换行效果可以用\v

  • \v 在ascii中的含义是VT

    • 垂直制表位

  • 序号是 11

Commodore64 和 mac

  • Commondore64

    • 使用 \r 代替 \r\n

    • 这 就有分歧

    • 一度 也曾 很流行

    • 同样出于 节省空间的目的

    • Commodore64 影响了 mac

  • mac

    • 使用 \r 代替 \r\n

    • 甚至按键 都叫做return

    • 早期 也是

  • 后来 为了 和unix保持一致

    • 可能是因为Mac用户

    • 连接 unix-like的服务器

    • 换行不统一

    • 文件读取会出现错误

    • 需要用 ssh 命令

    • \r 修改为 \n

  • 流行的三大系统(类unix、mac、win)

    • 两个都是\n

  • 来来看看 微软的windows

微软

  • DOS系统 是兼容 CP/M 形成的

    • CP/M 使用 \r\n

  • 键盘上 印的名称是enter

    • 先 LineFeed 再 Return

    • 也是\r\n

    • 符号是↵

    • 对应字节是b"\x0d\x0a"

  • 后来 的 windows

    • 顺着 DOS的惯例

  • 跨系统 浏览文档的时候

    • 会有时候  多行 变成 一行

    • 有的会出现 '0D', '^M' 之类的乱码

  • 不只是 windows记事本🗒️

    • 而且 微软office 等

    • 都曾有 这个困扰

  • win10 最新的记事本🗒️

    • 已经 优化

python 解释器的理解

  • 标准 输入输出流

    • 靠的是 终端屏幕

    • 靠的是 终端键盘

    • python 的 字符输入

    • python 的 显示输出

  • 具体字符

    • 就会退回到本行开头

    • CarriageReturn

    • 就会换行

    • LineFeed

    • 显示\n的时候

    • 显示\r的时候

  • \n 写入文件的时候

    • 存储 在 文件 中

    • 就会以 b"\x0a"的字节形式

  • \r 写入文件的时候

    • 存储 在 文件 中

    • 就会以 b"\x0d"的字节形式

  • python3解释器 基于  操作系统

    • 操作系统 基于 cpu架构

  • 不管什么样的操作系统cpu 架构

    • \n 换行

    • \r 退到行头

    • 只要是 python解释器

    • 对于\n\r的解释方式 就是统一的

  • 这种统一 是跨平台的

    • 跨系统、跨cpu架构的

总结

  • 对于换行和回车

  • 不同层面的理解

    • unix-like 做得对

    • 不管 在什么系统、什么架构 上

    • 在我python上 是统一 的

    • unix-like

    • mac

    • windows

    • 带头简化 成 \n

    • 步调一致 就好

    • 为了 避免麻烦

    • 我和 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


[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines的评论 (共 条)

分享到微博请遵守国家法律