4

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

 1 year ago
source link: https://blog.51cto.com/oeasy/5995721
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

回忆上次内容

  • ​terminal​​终端
  • 主机网络中
  • 最终的 端点
  • ​TeleTYpewriter​
  • 电传打印机
  • ​shell​
  • 终端硬件基础上的
  • ​Console​​ 控制台
  • 主机旁边 的 控制面板
  • 存储文件 的 时候
  • 我 在文件里 打了回车​​\n​
  • 系统 将​​0x0a​​存入字节 进文件
  • 换行 ​​自动​​就有 回车功能 了吗?🤔
  • 被忽略的 ​​\r​
  • ​\r​​ 也是一个 ascii字符
  • ​\​​是
  • ​\r​​是
  • 什么是 转义 呢?
  • 转义转义 转化含义
  • 把原来 两个字符 : ​​\​​和​​r​
  • 转化为 ​​\r​​ 这样一个字符
  • ​\r​​ 是 ​​1​​个​​ascii​​字符
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python
  • 那么 ​​\r​​ 这一个字符
  • 对应字节 是​​多少​​ 呢?
  • ​\r​​ 对应的字节是
  • ​0x0d​
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_02
  • 这个​​0x0d​
  • 好像 在安徒生童话中 出现过

安徒生童话

  • 在 ​​文本​​观看 模式下
  • 自动 回车换行
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix_03
  • 在 ​​字节​​观看 模式下
  • ​0a​
  • ​0a​​前面是​​0d​
  • 先​​0a​​换行
  • (line-feed)
  • 再​​0d​​回车
  • (carriage-return)
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python_04
  • 总是 成对出现的
  • 为什么 呢?

换行 和 回车

  • ​换行​
  • 对应 字节​​0x0a​
  • Line-Feed
  • 垂直 向上喂纸
  • 所以是 ​​feed​
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix_05
  • ​回车​
  • 对应 字节​​0x0d​
  • Carriage-Return
  • 水平 ​​回​​到纸张左侧
  • 可移动的打印头
  • 运输字符 的 装置 (Carriage)
  • 所以是 ​​Return​
  • 这是 ​​两​​个控制信号
  • 不过他俩 经常 联合使用
  • 当​​CR​​和​​LF​​ 联合使用时
  • 会将 打印纸张 上移一行
  • 打字位置 将​​回​​到 新行的最左侧
  • 今天所理解 的 回车换行
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_python_06
  • 电传打字机
  • 渐渐 退出了历史舞台
  • 当初的纸张 变成了 今天的显示器
  • 打字机的按键 也演变为 如今的键盘
  • 甚至 有了 操作系统
  • 操作系统 是 如何理解 回车换行 的呢?

操作系统 ​​Unix​

  • 内存和软盘空间 的 不足
  • 设计者 决定采用
  • ​单​​个字符 来表示 换行回车
  • 使用 ​​\n​​ 替代 ​​\r\n​
  • 默认 ​​\n​​ = ​​\r\n​
  • ​一​​个字符干​​两​​个事
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix_07
  • 类unix(unix-like) 都是如此
  • 包括 BSD、Linux

unix 和 c 的羁绊

  • 延续了 这个惯例
  • ​\n​
  • 既干 ​​\n​​的活(换行)
  • 又干 ​​\r​​的活(回车)
  • 输出中有 \n 的话
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_08
  • 如果只有​​\n​
  • 下图这样的
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_09
  • 下图这样的

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

  • 是 回车加换行 的
  • 纯换行 不回车的效果 吗?
  • 纯换行效果可以用​​\v​
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_11
  • ​\v​​ 在ascii中的含义是VT
  • 垂直制表位
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_转义_12
  • 序号是 11

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

Commodore64 和 mac

  • Commondore64
  • 一度 也曾 很流行
  • 同样出于 节省空间的目的
  • 使用 ​​\r​​ 代替 ​​\r\n​
  • 这 就有​​分歧​​ 了
  • Commodore64 影响了 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_python_14
  • 跨系统 浏览文档的时候
  • 会有时候 多行 变成 一行
  • 有的会出现 ​​'0D'​​,​​ '^M'​​ 之类的乱码
  • 不只是 windows记事本🗒️
  • 而且 微软office 等
  • 都曾有 这个困扰
  • win10 最新的记事本🗒️

python 解释器的理解

  • 标准 输入输出流
  • python 的 字符输入
  • 靠的是 终端键盘
  • python 的 显示输出
  • 靠的是 终端屏幕
  • 显示​​\n​​的时候
  • LineFeed
  • 显示​​\r​​的时候
  • 就会退回到本行开头
  • CarriageReturn
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines_unix_15
  • 将​​\n​​ 写入文件的时候
  • 就会以 ​​b"\x0a"​​的字节形式
  • 存储 在 文件 中
  • 将​​\r​​ 写入文件的时候
  • 就会以 ​​b"\x0d"​​的字节形式
  • 存储 在 文件 中
  • python3解释器 基于 ​​操作系统​
  • ​操作系统​​ 基于 ​​cpu架构​
  • 不管什么样的​​操作系统​​、​​cpu 架构​
  • 只要是 python解释器
  • 对于​​\n​​、​​\r​​的解释方式 就是统一的
  • ​\n​​ 换行
  • ​\r​​ 退到行头
  • 这种统一 是跨平台的
  • 跨系统、跨cpu架构的
  • 对于换行和回车
  • 不同层面的理解
  • 电传打字机
  • 经常 一起干
  • 但也可以 分别干
  • 不同操作系统
  • unix-like
  • 带头简化 成 ​​\n​
  • 步调一致 就好
  • 为了 避免麻烦
  • 我和 unix-like一致
  • windows
  • 原来 我用户多
  • 定什么规矩 我说了算
  • 惹了 很多问题
  • 现在 我还是 随大流 吧
  • python 解释器
  • ​unix-like​​ 做得对
  • 不管 在什么系统、什么架构 上
  • 在我python上 是统一 的
  • 光说不练假把式
  • 我能看看电传打字机吗?🤔

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK