Skip to content

Latest commit

 

History

History
348 lines (268 loc) · 8.24 KB

299-802475-换行与回车的不同_通用换行符_universal_newlines.sy.md

File metadata and controls

348 lines (268 loc) · 8.24 KB
show version enable_checker
step
1.0
true

换行回车

回忆上次内容

  • 区分概念
    • terminal终端
      • 主机网络中
        • 最终的 端点
    • TeleTYpewriter
      • 电传打印机
      • 终端硬件
    • shell
      • 终端硬件基础上的
        • 软件壳子
    • Console 控制台
      • 主机旁边 的 控制面板

图片描述

  • 存储文件 的 时候
    • 在文件里 打了回车\n
    • 系统 将0x0a字节 存进文件
    • 换行 自动就有 回车功能 了吗?🤔
  • 回忆一下
    • 被忽略的 \r

\r

  • \r 也是一个 ascii字符

    • \
      • 转义字符
    • \r
      • 转义序列
  • 什么是 转义 呢?

    • 转义转义 转化含义
    • 把原来 两个字符 : \r
    • 转化为 \r 这样一个字符
  • 没错!

    • \r1ascii字符

图片描述

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

字节状态

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

图片描述

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

图片描述

  • 文本观看 模式下
    • 看到 回车换行

安徒生童话

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

图片描述

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

换行 和 回车

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

图片描述

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

联合使用

  • CRLF 联合使用时
    • 会将 打印纸张 上移一行
    • 并且 将到 新行的最左侧
  • 也就是
    • 今天所理解 的 回车换行

图片描述

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

操作系统 Unix

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

图片描述

  • 类unix(unix-like) 都是如此
    • 包括 BSD、Linux
  • 这样做 可以降低
    • 存储和通信的成本

unix 和 c 的羁绊

  • C语言

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

图片描述

  • 如果只换行(line-feed)
    • 本应是
      • 下图这样的

图片描述

  • 实际上是
    • 下图这样的

图片描述

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

纯换行

  • 纯换行效果可以用\v

图片描述

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

图片描述

  • 序号是 11

图片描述

  • 在ascii中的介绍是VT
    • Vertical Tab
    • 垂直制表符
  • unix 这种省略的写法
    • 其他操作系统 能支持吗?

Commodore64 和 mac

  • Commondore64
    • 一度 也曾 很流行
    • 同样出于 节省空间的目的
      • 使用 \r 代替 \r\n
  • 这 就与unix 有分歧 了!!
    • 而且 Commodore64 影响了 mac
  • mac
    • 早期 也是
      • 使用 \r 代替 \r\n
      • 甚至按键 都叫做 return
  • 后来 为了 和unix保持一致
    • \r 修改为 \n
      • 可能是因为Mac用户
        • 需要用 ssh 命令
          • 连接 unix-like的服务器
          • 换行不统一
          • 文件读取会出现错误
  • 流行的三大系统(类unix、mac、win)
    • 两个都是 用\n
    • 可以 形成规则
    • 都这么省略吗?
  • 还得去看看
    • 微软的windows
    • 毕竟人数众多

微软

  • 键盘上 印的名称是enter
    • 符号是
      • 先 LineFeed 再 Return

图片描述

  • DOS系统 是兼容 CP/M 形成的
    • CP/M 使用 \r\n
    • 对应字节是b"\x0d\x0a"
  • 后来 的 windows
    • 顺着 DOS的惯例
    • 这就和 unix系统 不兼容了
  • 不兼容 会发生什么问题吗?

乱码现象

图片描述

  • 修改 文件格式
    • file format

图片描述

  • 跨系统 浏览文档的时候
    • 有时候 会多行变成一行
    • 还有时候 会出现 '0D', '^M' 之类的乱码

图片描述

  • 不只是 windows记事本🗒️
    • 而且 微软office 等
    • 有 这个困扰
  • 最新windows的记事本🗒️
    • 已经 优化
  • 到今天
    • 主流的操作系统
    • 在这件事情上已经统一了
    • ε=(´ο`*)))唉

python 解释器的理解

  • 标准 输入输出流

    • python 的 字符输入
      • 靠的是 终端键盘
    • python 的 显示输出
      • 靠的是 终端屏幕 图片描述
  • 具体字符

    • 显示\n的时候
      • 就会换行
      • LineFeed
    • 显示\r的时候
      • 就会退回到本行开头
      • CarriageReturn
  • python中是如何跨平台

    • 实现换行自动回车 这件事情的呢?

python

  • python3解释器 基于 操作系统
    • 操作系统 基于 cpu架构
  • 不管什么样的操作系统cpu 架构
    • 只要是 python解释器
    • 对于\n\r的解释方式 就是统一的
      • \n 换行
      • \r 退到行头
  • 这种统一 是跨平台的
    • 跨系统、跨cpu架构的
  • py的源文件是如何换行的呢?

py源文件

  • 写下并保存这样的py文件

图片描述

  • py文件是纯文本文档
  • :%!xxd
    • 转化为字节形态

图片描述

  • 在编辑纯文本文件的时候
    • 一个回车 就 对应一个字节b"\x0a"
    • 就像所有linux下的 纯文本文件一样
  • 那为什么安徒生童话里
    • 就要用 两个字节 对应回车 呢?

读写文件

  • 安徒生童话中的换行回车
    • 使用的是0d0a
    • 这样今天看起来
      • 有点啰嗦

图片描述

  • 不过 通过明确的两字符
    • 就可以兼容历史上各种操作系统
    • 甚至可以兼容电传打字机
  • 不愧是 谷腾堡计划...

总结

  • 对于 换行和回车
  • 不同层面的 理解
    • 电传打字机
      • 两件事
      • 经常 一起干
      • 但也可以 分别干
    • 不同操作系统
      • unix-like
        • 带头简化 成 \n
        • 步调一致 就好
      • mac
        • 为了 避免麻烦
        • 我和 unix-like一致
      • windows
        • 原来 我用户多
          • 定什么规矩 我说了算
          • 惹了 很多问题
        • 现在 我还是 随大流 吧
    • python 解释器
      • unix-like 做得对
      • 不管 在什么系统、什么架构 上
      • 在我python上 是统一的
  • 光说不练 假把式
    • 我能看看 电传打字机 长什么样子吗?🤔
  • 我们下次再看!👋